我需要访问联接表,如果获取不带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():第一个参数应该是字符串或整数
答案 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'