Laravel 基于自的多态关系
Posted
技术标签:
【中文标题】Laravel 基于自的多态关系【英文标题】:Laravel self based polymorphic relationship 【发布时间】:2021-07-20 19:04:36 【问题描述】:我有 3 张桌子:
categories
admins
users
类别可以创建用户和管理员。在categories
表中我有morphs
字段:
$table->nullableMorphs('userable');
Category
模型中的关系:
public function userable()
return $this->morphTo();
public function user()
return $this->morphOne(self::class, 'userable');
但是当我尝试这样做时:
$category = Category::first();
$user = User::first();
$category->user()->save($user);
收到错误消息:
Illuminate\Database\QueryException 并带有消息“SQLSTATE[42S22]: 未找到列:1054“字段列表”中的未知列“userable_id” (SQL:更新
users
设置userable_id
=1,userable_type
= 应用\模型\类别,users
.updated_at
= 2021-04-27 12:13:22 其中id
= 1)'
如何在 laravel 中正确创建自变形关系?
【问题讨论】:
你能告诉我们你的迁移吗? 类别表迁移? @SpaceDogCS 哦,算了,现在我明白你要做什么了 【参考方案1】:所以我认为你应该做的是将你添加到类别中的关系用户添加到 User 模型和 Admin 模型中,那些具有这种关系的模型可以变形到类别中
class User
...
public function user()
return $this->morphOne(Category::class, 'userable');
...
class Admin
...
public function user()
return $this->morphOne(Category::class, 'userable');
...
所以你可以这样做你的逻辑
$category = Category::first();
$user = User::first();
$user->user()->save($category);
它会使用 userable_type beeing App\Models\User 和 userable_id beeing 1 或任何用户 ID 来更新您的类别记录
id | name | userable_type | userable_id |
---|---|---|---|
1 | Category Test | App\Models\User | 1 |
为了让事情变得更容易,您可以创建一个特征并将该关系添加到特征中
trait IsUserable
public function user()
return $this->morphOne(Category::class, 'userable');
而不是添加到 User 和 Admin 模型的关系,您只需使用 trait 来代替
class User
use IsUserable;
class Admin
use IsUserable;
【讨论】:
以上是关于Laravel 基于自的多态关系的主要内容,如果未能解决你的问题,请参考以下文章