我正在尝试从3rd表中收集我的产品的数据,我得到了
Property [title] does not exist on this collection instance.
custom_product_specifications
表获得product_id
,
specification_id
,text_dec
和longtext_dec
custom_product_specifications
中,我将根据其ID显示specification title
。text_dec
和longtext_dec
的数据 CustomProductSpecification Model
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class CustomProductSpecification extends Model
{
public $timestamps = false;
protected $fillable = [
'product_id', 'specification_id', 'text_dec', 'longtext_dec',
];
public function products(){
return $this->belongsToMany(Product::class);
}
public function specifications(){
return $this->belongsToMany(Specification::class,'custom_product_specifications', 'specification_id');
}
}
Product Model
public function customsubspecifications(){
return $this->belongsToMany(CustomProductSpecification::class, 'custom_product_specifications', 'product_id', 'specification_id');
}
public function specifications(){
return $this->belongsToMany(Specification::class);
}
Specification Model
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class Specification extends Model
{
protected $fillable = [
'title',
];
public function subspecifications(){
return $this->hasMany(Subspecification::class);
}
public function sets(){
return $this->belongsToMany(Set::class);
}
public function customproductspecifications(){
return $this->belongsToMany(CustomProductSpecification::class);
}
}
controller
$product = Product::where('slug', $productslug)->firstOrFail();
$customspecs = CustomProductSpecification::where('product_id', '=', $product->id)->get();
blade
@if(!empty($customspecs))
@foreach($customspecs as $customspec)
<tr>
<th style="width:150px;">{{ $customspec->specifications->title }}</th>
<th class="text-left">
{{$customspec->text_dec}}
{{$customspec->longtext_dec}}
</th>
</tr>
@endforeach
@endif
如果我使用{{ $customspec->specifications->title }}
,我会得到错误消息。
如果我使用{{ $customspec->specifications}}
,这就是我得到的:
我的一个数据具有规范信息(重复),其他数据仅显示[]
根据以下答案,我将blade
代码更改为:
@if(!empty($customspecs))
@foreach($customspecs as $customspec)
@foreach($customspec->specifications as $specification)
<tr>
<th style="width:150px;">{{ $specification->title }}</th>
<th class="text-left">
@isset($customspec->text_dec)
{{$customspec->text_dec}}
@endisset
@isset($customspec->longtext_dec)
{{$customspec->longtext_dec}}
@endisset
</th>
</tr>
@endforeach
@endforeach
@endif
这里有2个问题:
specifications
或details
中) my database
PS:它将仅加载我的上次输入id:4
Blade Results
PS:我的输入id:4
重复了3
次,而我应该获得的4
结果有不同的信息。
答案 0 :(得分:1)
您的CustomProductSpecification
和Specification
与belongs to many
关系有关。您必须使用此代码
@if(!empty($customspecs))
@foreach($customspecs as $customspec)
<tr>
@foreach($customspec->specifications as $specification)
<th style="width:150px;">{{ $specification->title }}</th>
@endforeach
<th class="text-left">
{{$customspec->text_dec}}
{{$customspec->longtext_dec}}
</th>
</tr>
@endforeach
@endif
答案 1 :(得分:0)
Laravel自动将您的查询结果从查询转换为集合,并尊重您的“ with”参数,并创建一个联接查询,以便为您提供您所请求的所有数据,但实际上是发生了一些情况,子表中的记录,因此laravel会假设它为null,并将您的Relation属性设为[]。在foreach循环中,当您尝试使用[]对象的属性时,会收到该错误。
如上所述,有很多方法可以解决此错误,但是我建议您了解为什么会发生此错误,以便您更好地了解laravel集合,关系以及如何将数据库表中的每个结果转换为您的方便。
使用empty()函数检查该属性上是否存在该值,并且该值不为空。
Laravel刀片有一个糖,您可以在这里找到:https://laravel-news.com/blade-or-operator
在尝试访问该属性之前,请使用错误抑制操作符“ @”。
在使用控制语句将其发送到视图之前,在控制器中构造一个新数组。
Laravel Blade作为@isset指令。您也可以使用它。更多详细信息here。