Php 获取属性(无对象)laravel
我有一个推荐表,其中有Php 获取属性(无对象)laravel,php,laravel,laravel-5,Php,Laravel,Laravel 5,我有一个推荐表,其中有user\u id和product\u id列,我试图显示大多数查看过的产品,但我得到一个错误 试图从视图中获取非对象的属性 如果我dd($viewsed)它能正确显示所有产品,但问题是它不能显示产品并抛出错误,你知道如何解决这个问题吗 控制器 $viewsed=推荐::with('product') ->其中('user_id',Auth::user()->id) ->选择('product_id') ->在随机序() ->groupBy('product_id') ->
user\u id
和product\u id
列,我试图显示大多数查看过的产品,但我得到一个错误
试图从视图中获取非对象的属性
如果我dd($viewsed)
它能正确显示所有产品,但问题是它不能显示产品并抛出错误,你知道如何解决这个问题吗
控制器
$viewsed=推荐::with('product')
->其中('user_id',Auth::user()->id)
->选择('product_id')
->在随机序()
->groupBy('product_id')
->orderby('product_id','DESC')
->采取(8)
->get();
Blade
文件
@foreach($viewed as $view)
<h1>USD: {{$view->product->price}}</h1>
<h2>USD: {{$view->product->info}}</h2>
@endforeach
Product.php
public function recommends()
{
return $this->hasMany('App\Recommends','product_id');
}
www.php
public function product()
{
return $this->belongsTo('App\Product','product_id');
}
您将获得一组推荐对象,其中包括产品模型。错误可能来自
$view
变量上缺少的产品。可能是由于GroupBy
语句,或者您可能没有将产品附加到该视图模型
在您的刀片页面上尝试以下测试:
<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>
USD:{{isset($view->product_id)\$view->product->price:'No product Set'}
USD:{{isset($view->product_id)?$view->product->info:'No product Set'}
您将获得一组推荐对象,其中包括产品模型。错误可能来自$view
变量上缺少的产品。可能是由于GroupBy
语句,或者您可能没有将产品附加到该视图模型
在您的刀片页面上尝试以下测试:
<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>
USD:{{isset($view->product_id)\$view->product->price:'No product Set'}
USD:{{isset($view->product_id)?$view->product->info:'No product Set'}
将$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'));
}
传入$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'));
}
如何将$viewed变量附加到view?
我认为最好知道如何调试它,所以我将尝试以这种方式帮助您
检查控制器中是否每个$view变量都有$product。像这样的东西
foreach($viewed as $view)
{
if (!$view->product) {
dd($view);
}
}
如果所有$viewed集合都有产品,那么问题不在数据中,因此我们可以继续讨论其他部分。您是如何将$viewed变量附加到view的?
我认为最好知道如何调试它,所以我将尝试以这种方式帮助您
检查控制器中是否每个$view变量都有$product。像这样的东西
foreach($viewed as $view)
{
if (!$view->product) {
dd($view);
}
}
如果所有$viewed集合都有产品,那么问题不在数据中,因此我们可以继续处理其他部分。任何关系数据/变量都为空,那么它将创建类似于相同的错误,因此您将在此处放置条件
刀片文件
@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
@if(!empty($view))
@foreach($视图)
美元:{{$view->product?$view->product->price:{}
美元:{{$view->product?$view->product->info:''}}
@endforeach
@恩迪夫
任何关系数据/变量都是空的,那么它将创建类似的错误,所以您将在此处放置条件
刃锉
@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
@if(!empty($view))
@foreach($视图)
美元:{{$view->product?$view->product->price:{}
美元:{{view->产品?$view->产品->信息:“”}
@endforeach
@恩迪夫
当您执行dd()时,是否可以发布返回的数据可能并非所有视图都有产品?如果是这样,您需要先检查产品是否存在,然后才能获取属性。我已经编辑了问题@codervine您可以显示视图模型吗?看起来products()可能是hasMany
,在这种情况下,您需要获取第一个产品,或者添加另一个循环。我已经添加了models@aynberCan。您可以发布执行dd()
时返回的数据吗?可能不是所有视图都有产品?如果是这样,您需要先检查产品是否存在,然后才能获取属性。我已经编辑了问题@codervine您可以显示视图模型吗?看起来products()可能有很多,在这种情况下,您需要获取第一个产品,或者添加另一个循环。我添加了模型@aynberI仍然获取,试图获取非对象的属性
@WatercaymanOK,取出->groupBy('product_id')->orderby('product_id',DESC请重试?这是将这些字段设置为集合,而不是每个视图
模型。我已尝试将它们取出,但@WatercaymanOK仍不起作用,最后要检查的是:从查询中取出->select('product_id')
。有时,没有完整的模型可能会更改关系的查询。请试试这个作为诊断。哦,还有andomorder()中的->
。只需简化bug检查如果最简单的查询版本不起作用,我就有点找不到答案了。你已经到了赤裸裸的地步。可能是
行上方的其他内容。等待-在检查刀片服务器中的isset后,如何获得非对象错误?你确定错误在$view
var上吗?我仍然得到试图获取非对象的属性@WatercaymanOK,取出->groupBy('product\u id')->orderby('product\u id','DESC')
,请重试?这是将这些字段设置为集合,而不是每个视图
模型。我已尝试将它们取出,但@WatercaymanOK仍不起作用,最后要检查的是:从查询中取出->select('product_id')
。有时,没有完整的模型可能会更改关系的查询。请试试这个作为诊断。哦,还有andomorder()中的->
。如果查询的最简单版本不起作用,只需简化bug检查