选择雄辩的加入laravel

时间:2018-06-28 05:30:56

标签: php laravel laravel-5

我需要访问联接表,如果获取不带select子句的数据,则getProducts()方法有效。没有select子句,如何获取point_transaction-> id? (我正在获取用户表ID)

控制器

$query = PointTransaction::join('users','users.id','=','point_transactions.user_id')->select('point_transactions.id as point_id', 'point_transactions.status as point_status')


查看

<td>{{$pointTransaction->point_id}}</td>
<td>
    {!!'';$items = $pointTransaction->getProducts() !!}
     @foreach($items as $key => $value)
     {{$key}} : {{$value}}
     @endforeach
</td>

我尝试了以下查询:

$query = PointTransaction::join('users','users.id','=','point_transactions.user_id')->select('point_transactions.id as point_id', 'point_transactions.status as point_status');

上面的getProducts()方法尝试获取非对象的属性时出现错误

我也尝试了以下方法:

$query = PointTransaction::join('users','users.id','=','point_transactions.user_id');

    if($where){
        switch($where){
            case "point_transactions.id":
                $query = $query->where('id', $value);
            break;
            default:
                $query = $query->where($where, 'like', '%'.$value.'%');
            break;
        }
    }

    $pointTransactions = $query->desc()->paginate($paginate)->get(['point_transactions.id as point_id', 'point_transactions.status as point_status']);

并且出现以下错误:

Collection.php第1032行中的

ErrorException: array_key_exists():第一个参数应该是字符串或整数

2 个答案:

答案 0 :(得分:2)

select同样雄辩,但您也可以像使用select()一样使用get()方法:

$query = PointTransaction::join('users','users.id','=','point_transactions.user_id')->select('point_transactions.id as point_id', 'point_transactions.status as point_status')

这也可以如下使用:

$query = PointTransaction::join('users','users.id','=','point_transactions.user_id')->get(['point_transactions.id as point_id', 'point_transactions.status as point_status']);

更新

您的错误:

$pointTransactions = $query->desc()->paginate($paginate)->get(['point_transactions.id as point_id', 'point_transactions.status as point_status']);

get()paginate()方法不能一起使用。您必须使用其中任何一个。

get()用于一起显示所有结果。
分页(计数)用于显示给定的每页结果计数。

我已经给出了get()的示例。您可以像这样使用paginate()方法:

$pointTransactions = $query->desc()->paginate($paginate, ['point_transactions.id as point_id', 'point_transactions.status as point_status']);

从上面可以看到,我刚刚从查询末尾删除了get()方法,并使用了必填字段更新了paginate()方法。

Laravel using paginate with only selected columns
Laravel - Paginate and get()

答案 1 :(得分:-1)

因为两个表中的“ id”列相同。因此,您必须在哪个表中指定“ id”。

'point_transactions.id as point_id'