我有2个与polimorphic关系相关的表:
商店表:
id | name | ...
15 | my_store | ...
Tag表,通过related_id键和类型连接到Store表。
id | related_id | tag | created | type
1 | 15 | test | 00:00:00 | store
2 | 15 | dummy | 00:00:00 | product
所以,在那个例子中,Store" my_store"只有标签" test" (" dummy"是产品的标签,而不是商店,除了它具有相同的related_id)。
我在我的代码中定义了Store模型,如下所示:
class Store extends Model {
protected $table = 'store';
public function tags()
{
return $this->morphMany('App\Tag', 'related', 'type');
}
}
标签模型:
class Tag extends Model {
protected $table = 'tags';
public function related()
{
return $this->morphTo();
}
}
但是当我尝试运行时
$store->tags;
我看到Laravel试图运行的查询是:
SQL: select * from `mwp_tags` where `mwp_tags`.`related_id` = 46
and `mwp_tags`.`related_id` is not null
and `mwp_tags`.`type` = App\Store)
查询正在寻找 App \ Store 而不是商店
我无法更改数据库中的值,我不想使用
protected $morphClass = 'store';
在商店模型中,因为我不知道是否需要创建另一个morphMany关系,可能还有另一个类型名称。
有人知道如何跳过此问题?谢谢!
答案 0 :(得分:0)
您可以尝试这样的事情:
public function tags()
{
$default_morph_class = $this->morphClass ?: null;
$this->morphClass = 'store';
$morph_many_query = $this->morphMany('App\Tag', 'related', 'type');
$this->morphClass = $default_morph_class;
return $morph_many_query;
}
您可以动态更改morphClass并将其设置回来。这允许您为不同的关系使用不同的morphClass。