我在Eloquent中从HasManyThrough关系中获取查询时遇到了问题。
这些是我的表
网页
幻灯片
SLIDES
我的页面模型:
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复制/粘贴:
我的页面需要哪3张正确的幻灯片。
为什么我会得到一个空数组?
答案 0 :(得分:2)
你不能hasManyThrough()在这里,因为你的实施并不支持一个。
假设您有三个模型A
,B
和C
以及A
希望通过C
与B
建立联系。
然后,如果您想使用hasManyThrough()
B
需要A
primary key
作为foreign key
C
需要B
primary key
作为foreign key
那是A <- B <- C
如果我把这个放在你的例子中,你拥有的是
A
将B
primary key
作为foreign key
C
将B
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();
我建议使用正确的命名约定。