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检查