我知道多对多关系是可能的。但是,教程指出了每个表都处于单独关系(函数)的方式。
但是,我需要一种方法来创建多对多的多态关系,即使它们来自多个表,我也可以获取它的所有关系。
示例:
Log
->connected_tables (the model relationship)
--> [0] App\User
--> [1] App\User
--> [2] App\Transaction
--> [3] App\Item
--> [4] App\ShippingInformation
数据透视表如下:
$table->increments('id');
$table->integer('entity_id')->unsigned();
$table->string('entity_type');
$table->integer('loggable_id')->unsigned();
$table->string('loggable_type');
然后在我的日志模型中,我试图将其取为:
public function loggable()
{
return $this->morphToMany('App\????', 'entity', 'activity_log_entity');
}
这是我不知道该放什么的部分。
答案 0 :(得分:0)
我找到了解决这个问题的方法。但是我和它一起遇到了一个小问题。
首先,在我的日志表中,我通过我的数据库放置了一个hasMany关系,然后加载了“relatedTables”
public function logs()
{
return $this->hasMany('App\LogPivot', 'entity_id')->with('relatedTables');
}
然后我为枢轴创建了一个模型并建立了这种关系
public function relatedTables()
{
return $this->morphTo('loggable');
}
因此,这将获取日志的所有枢轴,然后每个枢轴将变形为他们所指向的任何东西。
问题是枢轴将是第一个而不是实际的表。我如何“采摘”实际的桌子而不是枢轴?
App\LogPivot {#1251
id: 2,
entity_id: 573,
entity_type: "log",
loggable_id: 3,
loggable_type: "user",
created_at: null,
updated_at: null,
related_table: null,
loggable: App\User {#1259
id: 3,
name: "Juan",
},
},
我想直接在其关系上使用App \ User而不是LogPivot
答案 1 :(得分:0)
通过为数据透视表创建模型,我们可以轻松地检索关系中的所有模型。例如,
这是Laravel Documentation中多对多态关系的示例。
posts
id - integer
name - string
videos
id - integer
name - string
tags
id - integer
name - string
taggables
tag_id - integer
taggable_id - integer
taggable_type - string
我们可以创建模型'App\Post
','App\Video
','App\Tag
'和'App\Taggable
'。
要检索具有特定标签ID的所有模型,我们可以使用“'App\Taggable'::where('tag_id',1)->get()
”。
为了更加方便,我们可以将以下函数添加到“ App\Tag
”模型中。
public function taggables()
{
return 'App\Taggable'::where('tag_id',$this->id)->get();
}