Laravel Eloquent HasManyThrough 返回空数组

Laravel Eloquent HasManyThrough returning empty array

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

这些是我的桌子

页数

幻灯片

幻灯片

我的主页模型:

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();

查询日志:我不是页面ID:3和slideshow_fk:1,[? = 1]

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

页面->幻灯片数组:

[]

PhpMyAdmin SQL copy/paste:

http://prntscr.com/e0hy4e

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

为什么我得到一个空数组

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

假设您有三个模型 ABC,并且 A 想通过 B 连接到 C

那么如果你想使用hasManyThrough()

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

也就是A <- B <- C

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

  • ABprimary key 作为 foreign key
  • CBprimary 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();

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