2016-12-11 5 views
0

Я использую свойство toMany() в Laravel, но у сотрудника может быть несколько позиций, я хочу принести сотрудникам самую большую дату и desc id.Laravel принадлежитToMany() date desc

PHP code/MySQL result

+0

Здесь не так много. Почему вы назвали свою модель во множественном числе? Laravel рекомендует использовать уникальные ключевые слова. Во-вторых, почему вы используете whereRaw и whereHas запрос в вашей функции отношений? Функция отношения не должна иметь запрос 'where', написанный вместе с отношениями ... Наконец, что именно вам нужно? Как 10 имеют самую большую дату на первом снимке? Это потому, что у него самый большой из идентификаторов? – prateekkathal

+0

- Я написал неправильно, уже Position.php. - Я хочу найти позицию, в которой работает персонал в соответствии с датой «action_date». Поэтому я использовал опрос. - На первом снимке, если даты совпадают, используйте последние добавленные данные, то есть самый большой идентификатор. –

ответ

0

В вашем Person.php, добавьте обратно отношение к Position.php

public function positions() 
{ 
    return $this->belongsToMany('Path\To\Person')->withPivot(['id', 'person_id', 'position_id', 'created_at', 'updated_at']); 
} 

Теперь вы можете сделать что-то вроде ....

$positions = Person::positions() 
        ->wherePivot('action_date', '>=', $date) 
        ->orderBy('person_position.id', 'desc') 
        ->get(); 

$pivotTable = $positions->map(function($position) { 
       return $position->pivot; 
       }); 

Дайте мне знать, если вы столкнулись с любым другим вопросом:

+0

Благодарим за помощь. Этот код предназначен только для персонала, мне нужен код, который работает с «mysql query». Образец кода; "Позиция :: найти (1) -persons() -> whereBranch (1) -> счетчик();" Есть ли код, который может предоставить этот вопрос? –

+0

@DavutKember В комментарии выше, ** «Я хочу, чтобы найти позицию, в которой работает персонал в настоящее время ...» ** Как по приведенному выше коду (который вы только что прокомментировали) вы находите позицию? Выполняя 'Position :: find (1)' ... Вы уже знаете, на каком месте работает персонал. Пожалуйста, будьте ясны. – prateekkathal

+0

Я хочу найти всех сотрудников, которые работают в том положении, которое я хочу. Обращайтесь к базе изображений снова, тот же персонал имеет три позиции. Я хочу, чтобы позиция с наивысшей датой была действительной. Итак, в соответствии с последней базой данных на картинке, я хочу, чтобы «Позиция :: find (2) -> people() -> count() запрос прибыл в 0, а Position :: find (9) -> человек () -> count(), чтобы прийти к 1 " " Прошу прощения за плохой английский, я переводил его с помощью Google Translate ". –

Смежные вопросы