Laravel 5 关系使用 'JSON' 列
Laravel 5 relationship using a 'JSON' column
是否可以使用 Eloquent 在 Laravel 5 中创建关系,其中外键存在于 JSON
列的字段中?
如果是,怎么会?
示例:
我有一个名为 chats
的 table,它有一个 participantIds
列,数据类型为 JSON
。数据的 JSON
格式如下所示:
{"creator": "1", "recipient": "2"}
我想加入 users
table 使用这些字段来获取聊天的参与者。
我该怎么做?
Laravel 没有对 JSON 关系的原生支持。
我为此创建了一个包:https://github.com/staudenmeir/eloquent-json-relations
你可以这样使用它:
class Chat extends Model
{
use \Staudenmeir\EloquentJsonRelations\HasJsonRelationships;
protected $casts = [
'participantIds' => 'json',
];
public function creator()
{
return $this->belongsTo(User::class, 'participantIds->creator');
}
public function recipient()
{
return $this->belongsTo(User::class, 'participantIds->recipient');
}
}
class User extends Model
{
use \Staudenmeir\EloquentJsonRelations\HasJsonRelationships;
public function createdChats()
{
return $this->hasMany(Chat::class, 'participantIds->creator');
}
public function receivedChats()
{
return $this->hasMany(Chat::class, 'participantIds->recipient');
}
}
是否可以使用 Eloquent 在 Laravel 5 中创建关系,其中外键存在于 JSON
列的字段中?
如果是,怎么会?
示例:
我有一个名为 chats
的 table,它有一个 participantIds
列,数据类型为 JSON
。数据的 JSON
格式如下所示:
{"creator": "1", "recipient": "2"}
我想加入 users
table 使用这些字段来获取聊天的参与者。
我该怎么做?
Laravel 没有对 JSON 关系的原生支持。
我为此创建了一个包:https://github.com/staudenmeir/eloquent-json-relations
你可以这样使用它:
class Chat extends Model
{
use \Staudenmeir\EloquentJsonRelations\HasJsonRelationships;
protected $casts = [
'participantIds' => 'json',
];
public function creator()
{
return $this->belongsTo(User::class, 'participantIds->creator');
}
public function recipient()
{
return $this->belongsTo(User::class, 'participantIds->recipient');
}
}
class User extends Model
{
use \Staudenmeir\EloquentJsonRelations\HasJsonRelationships;
public function createdChats()
{
return $this->hasMany(Chat::class, 'participantIds->creator');
}
public function receivedChats()
{
return $this->hasMany(Chat::class, 'participantIds->recipient');
}
}