【问题标题】:Laravel Eloquent HasManyThrough returning empty arrayLaravel Eloquent HasManyThrough 返回空数组
【发布时间】:2017-01-27 01:08:29
【问题描述】:

我无法从 Eloquent 中的 HasManyThrough 关系中获取查询。

这是我的桌子

页数

  • 身份证
  • slideshow_fk

幻灯片

  • 身份证

幻灯片

  • 身份证
  • slideshow_id

我的页面模型:

class Page extends Model
{
    public function slideshow_id(){
        return $this->belongsTo(Slideshow::class);
    }
    public function slides(){
        return $this->hasManyThrough('App\Slide','App\Slideshow','id','slideshow_id','slideshow_fk');
    }
}

控制器

$page=Page::where("slug","=",$slug)->with('slides')->first();

查询日志:我不是 Page ID:3 with slideshow_fk:1, [? = 1]

select `slides`.*, `slideshows`.`id` from `slides` inner join `slideshows` on `slideshows`.`id` = `slides`.`slideshow_id` where `slideshows`.`id` in (?)

page->幻灯片数组:

[]

PhpMyAdmin SQL 复制/粘贴:

http://prntscr.com/e0hy4e

我的页面需要哪些正确的 3 张幻灯片。

为什么我得到一个空数组

【问题讨论】:

  • 你检查过 Page::where("slug","=",$slug)->first();正在退货吗?
  • 是的,我得到了返回的页面:{"id":3,"name":"xxx","description":"xxx.","slug":"koledar","slideshow_fk ":1,"created_at":"2017-01-24 12:05:23","updated_at":"2017-01-24 12:05:23","slides":[]}

标签: php laravel eloquent


【解决方案1】:

你不能在这里hasManyThrough(),因为你的实现不支持需要一个。

假设您有三个模型ABCA 想通过C 连接到C

那么如果你想使用hasManyThrough()

  • B 需要有Aprimary key 作为foreign key
  • C 需要有Bprimary key 作为foreign key

那是A <- B <- C

如果我把这个放在你的例子中,你所拥有的是

  • ABprimary key 作为foreign key
  • C 拥有Bprimary key 作为foreign key

这是A -> B <- C

你可以在这里定义这样的模型。

class Pages extends Model
{
    public function slideshow()
    {
        return $this->belongsTo(Slideshow::class);
    }
}

class Slideshow extends Model
{
    public function slides()
    {
        return $this->hasMany(Slides::class);
    }

}

class Slides extends Model
{

}

然后像这样查询

$pags = Pages::with('slideshow.slides')->where('slug', $slug)->first();

我建议使用正确的命名约定。

【讨论】:

  • 这完全有道理!谢谢,我会在接下来的几分钟内尝试
  • 好的,我得到了它的工作,谢谢你这么多!我这样定义我的 Page 模型关系: return $this->hasOne('App\Slideshow','id','slideshow_id'); 它有效。但我仍然有“A有B的主键作为外键”
猜你喜欢
  • 2020-06-26
  • 1970-01-01
  • 2014-08-14
  • 2020-03-07
  • 2016-09-24
  • 2020-10-14
  • 2014-11-29
  • 1970-01-01
  • 2021-04-14
相关资源
最近更新 更多