【发布时间】:2016-11-04 11:15:31
【问题描述】:
我的内容模型具有动态关系。我使用内容模型作为我的帖子类型,并且它们在数据库中的每一个都有一个模型值,该模型值重定向到一个模型,该模型是内容类型的实际内容,以后可能会使用作曲家包安装。
public function contents() {
return $this->hasMany($this->model);
}
当我在我的视图中使用这种关系时它会起作用
$type->contents
但是当我想在我的控制器中预先加载这种关系时;
$types = Content::with('contents')->get();
我得到了错误
FatalThrowableError in Model.php line 844: Class name must be a valid object or a string
我还没有弄清楚为什么这不起作用,也没有想到其他方法可以实现同样的目标。如果不清楚,我可以提供更多细节。提前致谢!
UPDATE(我想出的临时/永久解决方案) 我删除了关系并用这个替换它;
public function getContentsAttribute() {
$items = $this->contents_type::with('user')->get();
return $items;
}
【问题讨论】:
-
您是否尝试过使用 FQN,即: public function contents() { return $this->hasMany('App\Models\Content'); }
-
是的,如果我只有一种类型的内容,这可以工作,目前我的内容类型是页面和帖子。它们在内容表上分别用模型值 Socms\Content\Page 和 Socms\Content\Post 表示。 -> i.imgur.com/ByE2pT5.png
-
试试这个
return $this->hasMany(self::$modelClass);将参数设为静态!不要忘记设置$modelClass! -
伊斯梅尔,我不确定你的意思。
标签: php laravel eloquent relationship eager-loading