我有一个带有user_id
和product_id
列的推荐表,我试图显示浏览最多的产品,但出现错误
试图从视图中获取非对象的属性,
如果我dd($viewed)
正确显示了所有产品,但问题是它无法显示产品并抛出错误,那么如何解决此问题的任何想法?
Controller
$viewed = Recommends::with('product')
->where('user_id', Auth::user()->id)
->select('product_id')
->inRandomOrder()
->groupBy('product_id')
->orderby('product_id', 'DESC')
->take(8)
->get();
Blade
文件
@foreach($viewed as $view)
<h1>USD: {{$view->product->price}}</h1>
<h2>USD: {{$view->product->info}}</h2>
@endforeach
当我dd($ viewed)我得到这个
Collection {#357 ▼
#items: array:8 [▼
0 => Recommends {#369 ▼
#connection: "mysql"
#table: "recommends"
#primaryKey: "id"
#keyType: "int"
+incrementing: true
#with: []
#withCount: []
#perPage: 15
+exists: true
+wasRecentlyCreated: false
#attributes: array:1 [▼
"product_id" => 39
]
#original: array:1 [▶]
#changes: []
#casts: []
#dates: []
#dateFormat: null
#appends: []
#dispatchesEvents: []
#observables: []
#relations: array:1 [▼
"product" => product {#387 ▼
#searchable: array:1 [▶]
#table: "products"
#primaryKey: "id"
#fillable: array:7 [▶]
#connection: "mysql"
#keyType: "int"
+incrementing: true
#with: []
#withCount: []
#perPage: 15
+exists: true
+wasRecentlyCreated: false
#attributes: array:11 [▶]
#original: array:11 [▼
"id" => 39
"name" => "e"
"price" => 3
"info" => "s"
Product.php
public function recommends()
{
return $this->hasMany('App\Recommends','product_id');
}
recommends.php
public function product()
{
return $this->belongsTo('App\Product','product_id');
}
答案 0 :(得分:0)
您将获得推荐对象的集合,其中包括产品模型。该错误很可能是由于product
变量上缺少$view
而引起的。可能是由于GroupBy
语句所致,或者您可能只是没有将产品附加到该View模型。
在刀片服务器页面上尝试以下操作进行测试:
<h1>USD: {{isset($view->product_id)?$view->product->price: 'No Product Set'}}</h1>
<h2>USD: {{isset($view->product_id)?$view->product->info: 'No Product Set'}}</h2>
答案 1 :(得分:0)
您要在其中传递$ view以及加载查看文件的位置 在您的控制器内部函数中尝试以下操作:
//controller
function abc(){
$viewed = Recommends::with('product')
->where('user_id', Auth::user()->id)
->select('product_id')
->inRandomOrder()
->groupBy('product_id')
->orderby('product_id', 'DESC')
->take(8)
->get();
return view('folder/blade_file_name', compact('viewed'));
}
答案 2 :(得分:0)
您如何附加$ viewed变量进行查看? 我认为最好知道如何进行调试,这样我将尽力为您提供帮助。
检查每个$ view变量是否在控制器中都有$ product。像这样的东西
foreach($viewed as $view)
{
if (!$view->product) {
dd($view);
}
}
如果所有$ viewed集合都有产品,则问题不在数据中,因此我们可以继续进行其他操作。
答案 3 :(得分:0)
如果任何关系数据/变量为空,则将产生相同的错误,因此您将在此处放置条件.........
刀片文件
@if(!empty($viewed))
@foreach($viewed as $view)
<h1>USD: {{$view->product ? $view->product->price : ''}}</h1>
<h2>USD: {{$view->product ? $view->product->info : ''}}</h2>
@endforeach
@endif