Laravel:如何确定多对多关系的所有者类型?

时间:2016-07-09 19:10:45

标签: laravel-5 polymorphism many-to-many

我遵循example here并建立了多对多的多态关系。我有:

tags:
-PHP
-movie

如果我运行

Route::get('tag/{id}/', function($id){    
  $tag = Tag::find($id);
  return $tag;    
});

该网站将给我这个

{"id":2,"name":"movie","created_at":null,"updated_at":null}

如果我很幸运或者我确定这个标签属于帖子,当我使用

return $tag->posts; 

它将返回包含帖子信息的数组。但是,如何确定标签所属的所有者(帖子或视频)的类型,以便我可以使用适当的功能(如帖子或视频)? 在一对多的多态关系示例中,我可以查看imageable_type以了解我正在处理的所有者(订单,员工)的类型。但我无法在多对多的多态中检索taggable_type。我试过了

Route::get('tag/{id}/', function($id){    
    $tag = Tag::find($id);
    return $tag->taggable;
});

但没有发生任何事。如何检索此属性?我正在使用Laravel 5.2.39。

1 个答案:

答案 0 :(得分:1)

一种方法是使用instanceof

编辑我可能误解了它 - 但我并不完全确定。如果您想知道要调用哪个所有者,请确定要返回的模型类型(例如,使用instanceof),然后调用该模型中定义的正确belongsTo方法。 / p>

use App\Post;
use App\Video;

if($tag instanceof Post) {
    // Do something
} elseif($tag instanceof Video) {
    // Do something else
}