【发布时间】:2020-01-11 15:58:09
【问题描述】:
我无法弄清楚eager loading 如何与以下示例一起使用。这是我当前的数据库,其中包含两个表,Quotes:存储一般信息的位置,以及 QuotesDetails:存储 Quotes 中每个 Quote 的详细信息的位置。
在模型中,我有以下结构:
Quotes.php
class Quotes extends Model
{
public function quotesdetails()
{
return $this->hasMany('App\QuotesDetails', 'quoteid', 'id');
}
}
和 QuotesDetails.php 具有以下模型:
class QuotesDetails extends Model
{
public function quotes()
{
return $this->belongsTo('App\Quotes', 'id', 'quoteid');
}
}
我使用了 hasMany(在 Quotes 中),因为每个引号可以有/显示 3-4 个引号细节。
在我的控制器中使用以下查询:
$returnquotes = Quotes::with('quotesdetails')->where('id', '=', $quoteid)->get();
在我看来,我使用以下结构:
@foreach ($returnquotes as $quotes)
{{$quotes->shipcity }}
{{$quotes->quotesdetails->service_code }}
@endforeach
shipcity显示信息没有问题,但是service_code不显示并报错。
老实说,我相信它必须与这个架构一起工作,但我不知道为什么不工作。我的想法:
-
在控制器中:在控制器中使用“with('quotesdetails')”,它必须建立出现在 Quotes.php 中的关系,其名称为 ->quotedetails,该关系在 QuotesDetails.php 中有许多关联的注册表
李> -
鉴于:使用“$quotes->quotesdetails->service_code”必须检索与quotes表关联的service_code(我正在使用foreach,因为quotesdetails每个报价可以有多个注册表)
李> 在模型中:我对 Quotes.php 使用“hasMany”,因为依赖表是 QuotesDetails,而 QuotesDetails.php 中的“belongsTo”是相反的原因。
任何有助于理解使用 eloquent 和 laravel 进行预加载逻辑的帮助。
【问题讨论】:
-
您是否尝试过
dd($quotes)来查看quotesdetails包含的内容? (quotesdetails可能也是你需要foreach的集合,因为它是一个集合,所以service_code不存在) -
我使用了 echo '
' 。 print_r($returnquotes, true) 。 '
';并显示所有信息,来自报价和报价细节的信息。我不知道为什么它显示的结果与标签 [attributes:protected] => Array 和 [original:protected] => Array 重复 -
但可能你是对的,问题是我在依赖表中有一个集合。所以可能我必须为该集合循环循环
标签: php laravel eloquent eager-loading