【问题标题】:Select in eloquent join laravel在 eloquent 中选择加入 laravel
【发布时间】:2018-12-07 02:07:03
【问题描述】:

我需要访问连接表,如果在没有选择子句的情况下获取数据,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():第一个参数应该是字符串或者整数

【问题讨论】:

标签: php laravel laravel-5


【解决方案1】:

select 在 eloquent 中也是一样的,但是你也可以像 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() 用于同时显示所有结果。
paginate(count) 用于显示每页的给定结果计数。

我已经给出了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()

【讨论】:

  • @telesid,你能看看我更新的问题吗?它还没有工作。谢谢
  • 更新了我的答案 ...检查一下。您实际上误会了 paginate()get() 方法!!!
  • 谢谢兄弟!做到了吗:D
【解决方案2】:

因为两个表中的“id”列相同。所以你必须在哪个表中指定“id”。

'point_transactions.id as point_id'

【讨论】:

    猜你喜欢
    • 2013-06-10
    • 1970-01-01
    • 2014-04-17
    • 2015-02-23
    • 2013-04-03
    • 2019-11-19
    • 2019-01-01
    • 1970-01-01
    • 2015-09-28
    相关资源
    最近更新 更多