Выберите в красноречивом присоединении laravel - PullRequest
0 голосов
/ 28 июня 2018

Мне нужен доступ к объединяемой таблице, и метод getProducts () работал при получении данных без предложения select. Как я могу получить point_transaction-> id без предложения select? (Я получаю идентификатор таблицы пользователей)

Контроллер

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


View

<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']);

и я получаю следующую ошибку:

ErrorException в строке Collection.php 1032: array_key_exists (): первый аргумент должен быть либо строкой, либо целым числом

Ответы [ 2 ]

0 голосов
/ 28 июня 2018

Из-за одного и того же столбца "id" в двух таблицах. Таким образом, вы должны указать "id" в какой таблице.

'point_transactions.id as point_id'
0 голосов
/ 28 июня 2018

select тоже самое в eloquent, но вы также можете использовать метод get () как select (), например:

$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']);

UPDATE

Ваша ошибка:

$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 с использованием paginate только с выбранными столбцами
Laravel - Paginate and get ()

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...