Laravel Eloquent HasManyThrough返回空数组

时间:2017-01-26 08:43:59

标签: php laravel eloquent

我在Eloquent中从HasManyThrough关系中获取查询时遇到了问题。

这些是我的表

网页

  • ID
  • slideshow_fk

幻灯片

  • ID

SLIDES

  • ID
  • 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-> slide arrays:

[]

PhpMyAdmin SQL复制/粘贴:

http://prntscr.com/e0hy4e

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

为什么我会得到一个空数组

1 个答案:

答案 0 :(得分:2)

你不能hasManyThrough()在这里,因为你的实施并不支持一个。

假设您有三个模型ABC以及A希望通过CB建立联系。

然后,如果您想使用hasManyThrough()

  • B需要A primary key作为foreign key
  • C需要B primary key作为foreign key

那是A <- B <- C

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

  • AB primary key作为foreign key
  • CB primary 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();

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