merge with有这个短语吗?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了merge with有这个短语吗?相关的知识,希望对你有一定的参考价值。
有这一个短语的A merge with B 是说A和B合并在一起,成为一个整体
你可以下一个英语字典APP
拿不准的可以去上面查一下 参考技术A 有这个短语。merge with指与……合并。希望对你有所帮助,谢谢您的支持! 参考技术B 有的,意为合并,融合,汇合 参考技术C 这个可以有。与……合并。 参考技术D 有啊 融合的意思哦
Laravel Multi BelongsTo RelationShip Merge with Eager Loading
【中文标题】Laravel Multi BelongsTo RelationShip Merge with Eager Loading【英文标题】: 【发布时间】:2020-11-09 05:19:54 【问题描述】:Laravel 版本:7.0
reviews
表(模型 - 审查)具有 id
、product_type
、product_id
、rating
列。
product_type
可以是service
、plugin
、module
,每个值都有自己的模型App\Service
、App\Plugin
、App\Module
。我可以将model names
直接放入product_type
,但我更喜欢使用这些值。
这里是Review
模型关系。
public function plugin()
return $this->belongsTo(Plugin::class, "product_id")->withDefault();
public function module()
return $this->belongsTo(Module::class, "product_id")->withDefault();
public function service()
return $this->belongsTo(Service::class, "product_id")->withDefault();
public function getItem()
if($this->product_type=='module')
return $this->module;
elseif($this->product_type=='service')
return $this->service;
else
return $this->plugin;
现在我想在 Review Model 中通过预先加载来获得它们,如下所示:
$reviews = Review::with("getItem")->get();
如果没有 Eager 加载,我可以使用 $review->getItem()->name
// 这会返回产品名称。
如何通过急切加载获得它们?
【问题讨论】:
【参考方案1】:您可以轻松地将其实现为多态关系。在您的评论模型中,您可以这样做:
模型结构
App\Review.php
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class Review extends Model
public function reviewable()
return $this->morphTo();
然后将 reviews() 方法添加到您的 App\Service、App\Plugin 和 App\Module 模型
public function reviews()
return $this->morphMany('App\Review', 'reviewable');
表结构
您的评论表可能如下所示:
reviews
id - integer
body - text
reviewable_id - integer
reviewable_type - string
注意reviewable_id
和reviewable_type
字段。 reviewable_id
存储已审核项目的 id,reviewable_type
存储与项目相关的模型。
检索关系
您可以通过模型访问关系。例如,要访问一项服务的所有评论,我们可以使用 reviews 动态属性:
$service = App\Service::find(1);
foreach ($service->reviews as $review)
//
您还可以通过访问执行 morphTo 调用的方法的名称,从多态模型中检索多态关系的所有者。在您的情况下,这是 Review 模型上的可审查方法。因此,我们将该方法作为动态属性访问:
$review = App\Review::find(1);
$reviewable = $review->reviewable;
reviewable 将返回 Review 模型上的模型 Service
、Plugin
或 Module
【讨论】:
谢谢,刚刚更改了我的表格列。但是,如何进行急切加载?我试过$review = Review::with("reviewable")->get()
,但出现N+1
查询问题。有什么建议吗?
这可以帮助Review::with('reviewable')->get()->loadMorph('reviewable', [Service::class => 'service', Plugin::class => 'plugin', Module::class => 'module']);
以上是关于merge with有这个短语吗?的主要内容,如果未能解决你的问题,请参考以下文章