所以,我在获取多态关系的所有者时遇到了麻烦。这很简单。正如文档所说的那样。我已经能够取得孩子而不是主人。
这是我的表结构:
库存表的表结构:
历史模型:
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 :(得分:1)
您必须将其包含在关系$this->morphTo('moveTo');
以及
public function moveTo()
{
return $this->morphTo('moveTo');
}
我不确定,但是Laravel Morph Relationship使用able
作为后缀,例如commentable
,taggable
。这样你就不必在上面做了。
这解决了我的问题。希望能帮助到你。 :)
答案 1 :(得分:0)
您正在库存模型中定义morphMap,但需要在服务提供商中定义。您可以构建自己的服务提供者,也可以将其放在AppServiceProvider
。
class AppServiceProvider extends ServiceProvider
{
public function boot()
{
Relation::morphMap([
'inventory' => 'App\Inventory',
'customer' => 'App\Customer',
'supplier' => 'App\Supplier',
]);
}
}