簡體   English   中英

獲取多對多多態中的所有關系

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM