查询返回Object(Builder),未定义的属性

时间:2017-04-23 10:53:03

标签: sql postgresql laravel query-builder

我有以下代码

public function detailCustomer(Customer $customer)
    {
        $vehicles = DB::table('vehicles')
                    ->selectRaw('*')
                    ->where('cust_id', '=', $customer->id);
        return view('customers.detail', array('customer' => $customer, 'vehicles' => $vehicles));
    }

vehicles包含:

spz
cust_id <FK> //this is foreign key to customer->id
type
brand

customers.detail视图中,我尝试使用以下代码来显示数据,但是我收到此错误:

Undefined property: Illuminate\Database\PostgresConnection::$spz

代码:

@if (count($vehicles) > 0)
  <?php $i = 1; ?>

  @foreach ($vehicles as $vehicle)
    <?php $i++; ?>
    <td>{{$vehicle->spz}}</td>
    <td>{{$vehicle->type}}</td>
    <td>{{$vehicle->brand}}</td>
  @endforeach
@endif

我已阅读this topic但似乎不是我的问题,因为我使用foreach来遍历对象,但似乎我没有将数据库中的对象传入我的{{1}变量,因为在错误页面中,它也显示如下:

$vehicles

是什么让我认为'customer' => object(Customer), 'vehicles' => object(Builder) 正确获取其对象,但customer得到vehicles ??真的不知道那里有什么问题。有任何想法吗? 为了描述我在我工作的项目中做了什么,我有一个客户详细信息页面,我点击一个按钮将车辆添加到他的详细信息页面(个人资料页面),我发送客户Builder作为参数我将车辆添加到数据库中的功能,可以正常运行(车辆与客户id正确添加)。现在,当我想显示包含上述代码的车辆信息的详细页面时,问题就出现了。 希望它足够清楚。谢谢你的建议。

1 个答案:

答案 0 :(得分:1)

尝试在控制器中添加->get()->paginate($YOUR_LIMIT_ONE_PAGE)

public function detailCustomer(Customer $customer)
{
    $vehicles = DB::table('vehicles')
                ->selectRaw('*')
                ->where('cust_id', '=', $customer->id)->get();
                // ->where('cust_id', '=', $customer->id)->paginate($YOUR_LIMIT_ONE_PAGE);
    return view('customers.detail', array('customer' => $customer, 'vehicles' => $vehicles));
}

并尝试将foreach替换为此forelse

@forelse ($vehicles as $index => $vehicle)
    <tr>
        <td>{{$index}}</td>
        <td>{{($vehicle->spz !== null) ? $vehicle->spz : '-'}}</td>
        <td>{{($vehicle->type !== null) ? $vehicle->type : '-'}}</td>
        <td>{{($vehicle->brand !== null) ? $vehicle->brand : '-'}}</td>
   </tr>
@empty
    <td colspan='4'>Data not found</td>
@endforelse