php – 如何在Laravel 5.2中使用多对多的多态关系

php – 如何在Laravel 5.2中使用多对多的多态关系,第1张

概述我正在阅读laravel 5.2 docs以在我的Laravel应用程序中实现多对多的多态关系. 我有许多模型,如博客,问题,照片等,我想要所有的标签系统. 我用以下模式创建了Tag表 Schema::create('tags', function (Blueprint $table) { $table->increments('id'); $table->stri 我正在阅读laravel 5.2 docs以在我的Laravel应用程序中实现多对多的多态关系.
我有许多模型,如博客,问题,照片等,我想要所有的标签系统.
我用以下模式创建了Tag表
Schema::create('Tags',function (Blueprint $table) {        $table->increments('ID');        $table->string('name');        $table->string('slug')->unique();        $table->timestamps();    });

下面是数据透视表模式.数据透视表名称为entity_Tags

Schema::create('entity_Tags',function (Blueprint $table) {     $table->increments('ID');     $table->integer('tag_ID')->unsigned();;     $table->integer('taggable_ID')->unsigned();     $table->string('taggable_type');     $table->timestamps();     $table->index('tag_ID');     $table->index('taggable_ID');     $table->index('taggable_type');});

这是在问题模型的标签模型中定义的关系

public function questions(){    return $this->belongsToMany('App\Question','entity_Tags','tag_ID','taggable_ID');}

并且在问题模型中定义了以下关系

public function Tags(){    return $this->belongsToMany('App\Tag','taggable_ID','tag_ID');}

现在我想定义Laravel 5.2中定义的Many to Many polymorphic关系.
我的问题是

>我如何定义它们?
>我应该删除多对多
关系并且只定义多对多的多态关系?
如果是,那么如何管理自定义数据透视表名称?
>还需要将列名称后缀作为其中一部分的单词
多态关系?

>使用return $this-> morphToMany()而不是belongsToMany,并在Tag模型中,使用返回$this-> morphedByMany()为反向关系编写3个方法.
>您只需要多态定义,不需要多对多的正常定义.数据透视表的名称在默认约定的末尾带有’able’,但您可以将其命名为任何所需名称.
>不,你最后不必在’able’中找到一个单词,这只是一种定义它更通用的方法,你可以将它命名为你想要的任何东西.

命名基于Laravel的一些默认约定.

更新:

您有以下数据透视表模式:

Schema::create('entity_Tags',function (Blueprint $table) {        $table->increments('ID');        $table->integer('tag_ID')->unsigned();;        $table->integer('entity_ID')->unsigned();        $table->string('entity_type');        $table->timestamps();        $table->index('tag_ID');        $table->index('entity_ID');        $table->index('entity_type');});

和标签表:

Schema::create('Tags',function (Blueprint $table) {    $table->increments('ID');    $table->string('name');    $table->string('slug')->unique();    $table->timestamps();});

因此,您希望为博客,视频和问题表/模型创建关系:

Tag.PHP型号:

public function questions(){    return $this->morphedByMany('App\Question','entity','entity_Tags');}public function blogs(){    return $this->morphedByMany('App\Blog','entity_Tags');}public function vIDeos(){    return $this->morphedByMany('App\VIDeo','entity_Tags');}

Question.PHP / Blog.PHP / VIDeo.PHP

public function Tags(){    return $this->morphToMany('App\Tag','entity_Tags');}
总结

以上是内存溢出为你收集整理的php – 如何在Laravel 5.2中使用多对多的多态关系全部内容,希望文章能够帮你解决php – 如何在Laravel 5.2中使用多对多的多态关系所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1264055.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-08
下一篇 2022-06-08

发表评论

登录后才能评论

评论列表(0条)

保存