2017-05-10 42 views
1

因此,我很難取回多態關係的所有者。這很簡單。完全按照文檔所述。我已經能夠取得孩子,但不是所有者。在Laravel 5.4中獲取多態關係的所有者

這是我的表結構:

histories table structure

表結構,庫存表:

Structure for inventory table

歷史模式:

namespace App; 

use Illuminate\Database\Eloquent\Model; 
use Illuminate\Database\Eloquent\Relations\Relation; 

Relation::morphMap([ 
    'inventory' => 'App\Inventory', 
    'customer' => 'App\Customer', 
    'supplier' => 'App\Supplier', 
]); 

class History extends Model 
{ 
    public function product() 
    { 
    return $this->belongsTo('App\Product'); 
    } 

    public function moveTo() 
    { 
    return $this->morphTo(); 
    } 
} 

這是庫存模型:

namespace App; 

use Illuminate\Database\Eloquent\Model; 

class Inventory extends Model 
{ 
    public function users(){ 
    return $this->belongsToMany('App\User'); 
    } 

    public function products(){ 
    return $this->hasMany('App\Product'); 
    } 

    public function histories() 
    { 
    return $this->morphMany('App\History', 'moveTo'); 
    } 
} 

不幸的是,dd($history->moveTo);返回的null值。

但是,如果我做dd($inventory->histories);,所有的數據都在那裏。

任何人有任何想法爲什麼?

回答

0

您正在定義庫存模型中的morphMap,但它需要在服務提供商中定義。您可以構建自己的服務提供商或將其置於AppServiceProvider的引導方法中。

class AppServiceProvider extends ServiceProvider 
{ 
    public function boot() 
    { 
     Relation::morphMap([ 
      'inventory' => 'App\Inventory', 
      'customer' => 'App\Customer', 
      'supplier' => 'App\Supplier', 
     ]); 
    } 
} 
+0

試過了。仍然返回'null'。 – kamudrikah

+0

但它仍然是一個很好的做法,即使它沒有修復,也可以通過使用'ServiceProvider'來實現:) –

1

你必須包括這裏面的關係$this->morphTo('moveTo');以及

public function moveTo() 
{ 
    return $this->morphTo('moveTo'); 
} 

我不知道,但Laravel變身關係使用able作爲後綴例如commentabletaggable。這樣你就不必在上面做。

這解決了我的問題。希望能幫助到你。 :)

+0

這個答案對你有幫助嗎? –