【问题标题】:Laravel: How to determine the type of owners of a many to many polymorphic relation?Laravel:如何确定多对多多态关系的所有者类型?
【发布时间】:2016-07-10 04:22:58
【问题描述】:

我遵循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。

【问题讨论】:

  • 你找到解决办法了吗?

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


【解决方案1】:

一种方法是使用instanceof

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

use App\Post;
use App\Video;

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

【讨论】:

  • 我遵循了您的解决方案,但 $tag 不符合上述任何条件(instanceof Post 或 Video)。当我使用 echo $tag->posts 时,它会显示信息数组;所以标签确实属于一个帖子。回到我的问题,要检索标签的所有者,我必须使用“帖子”或“视频”功能,所以我必须知道“东西”的类型(我不知道怎么说,一个词在这种情况下,通常表示帖子或视频)属于(帖子或视频)。我想检索类型以存储该类型信息并在 switch 中使用它来确定如何对待标签所有者。希望你明白我的意思。
  • 我想知道标签所有者是帖子还是视频使用功能帖子或视频来检索所有者。我想获取此信息并将其存储在 switch 参数的变量中,该变量具有大小写:“App\Post”和大小写:“App\Video”。
猜你喜欢
  • 2019-11-14
  • 2017-07-01
  • 2020-10-17
  • 2020-09-10
  • 2019-01-31
  • 1970-01-01
  • 2020-04-25
  • 2017-02-28
  • 1970-01-01
相关资源
最近更新 更多