[英]Get all relationships in many-to-many polymorphic
我知道多對多的多態關系是可能的。 但是,教程以一種方式指出每個表都將處於單獨的關系(功能)中。
但是,我需要一種創建多對多多態關系的方法,即使它們來自多個表,我也可以從中獲取所有關系。
例子:
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');
}
這是我不知道該放什么的部分。
我找到了解決此問題的方法。 但是我有一個小問題。
首先,在我的日志表中,我通過我的數據透視表放置了一個 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
通過為數據透視表創建模型,我們可以輕松檢索關系中的所有模型。 例如,
這是Laravel 文檔中多對多多態關系的示例。
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();
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.