Laravel:模型中的动态关系
Posted
技术标签:
【中文标题】Laravel:模型中的动态关系【英文标题】:Laravel: Dynamic Relationship in Model 【发布时间】: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
!
伊斯梅尔,我不确定你的意思。
【参考方案1】:
如果我正确理解您的问题,您的 contents
表是多态的,如果还没有,应该同时具有 foreign_id
和 foreign_type
(可以替换为 content_id
和 content_type
)。然后在您的内容模型中,您应该有以下代码:
public function contents()
return $this->morphTo();
【讨论】:
您好,谢谢您的回答,我已经尝试过了。这不正是我正在寻找的,因为 $type->contents 现在将尝试返回带有我不想指定的 foreign_id 的 foreign_type。我希望它返回属于一个类的所有行,而不必指定foreign_id。 我已经用我的临时解决方案编辑了我的问题 抱歉误会。我认为您的解决方案在我看来相当不错。【参考方案2】:(我想出的临时/永久解决方案) 我删除了关系并用它替换它;
public function getContentsAttribute()
$items = $this->contents_type::with('user')->get();
return $items;
【讨论】:
以上是关于Laravel:模型中的动态关系的主要内容,如果未能解决你的问题,请参考以下文章
Laravel Eager Loading 和动态绑定模型关系