@Al3xanderG
Вспоминаю как это быть web разработчиком...

Соединение двух таблиц и сортировка в Laravel?

Есть табличка контакты в ней есть внешний ключ на таблицу firms, соответственно в модели контактов есть:
public function firm()
    {
        return $this->belongTo('App\firm');
    }

а в фирмах есть:
public function contact()
    {
        return $this->hasMany('App\Contact')->withTimestamps();
    }

Задача у меня вывести все контакты, отсортированные в алфавитном порядке по фирмам, не понимаю как это сделать.
  • Вопрос задан
  • 1337 просмотров
Решения вопроса 2
Denormalization
@Denormalization
Задача у меня вывести все контакты, отсортированные в алфавитном порядке по фирмам, не понимаю как это сделать.

Непонятна задача. Нужно отсортировать контакты, или фирмы?

В общем не важно что нужно сортировать, для общего случая (сортировки и контактов и фирм):
public function firm()
{
    return $this->belongsTo('App\firm')->orderBy('field', 'asc');
}

public function contacts()
{
    return $this->hasMany('App\App\Contact')->orderBy('field', 'asc');
}


Где field и asc соответственно - поле для сортировки и направление.
Можно например так:
$firms = Firm::orderBy('field', 'asc')->get();
foreach ($firms as $firm) {
    $contact = $firm->contacts()->orderBy('field', 'asc')->get();
}


Или даже так:
$firms = Firm::with('contacts' => function ($q)
{
    return $q->orderBy('field', 'asc');
})->get();


Вариантов масса. Зависит от задачи.
Ответ написан
Комментировать
@Al3xanderG Автор вопроса
Вспоминаю как это быть web разработчиком...
Решил вопрос таким образом:
у контактов тип связи hasOne, у фирм belongsTo, запрос для вывода:
$partners = partner::orderBy('shortName','asc')->get();

в шаблоне как-то так:
@foreach ($partners as $partner)
                            @if ($partner->contact->count() > 0)
                                @foreach ($partner->contact as $contact)
                                <tr>
                                    <td>{{ $partner->shortName }}</td>
                                    <td>{{ $contact->lname }}</td>
                                    <td>{{ $contact->telm }}</td>
                                    <td>{{ $contact->telw }}</td>
                                    <td>{{ $contact->email }}</td>
                                <td></td>
                                </tr>
                                @endforeach
                            @endif
                        @endforeach


Насколько это решение правильно?
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы