Laravel 6 - Показать имя, почтовый индекс вместо идентификаторов в Blade - PullRequest
1 голос
/ 26 января 2020

Я новичок в Laravel, мне нужно показать имя вместо идентификатора в Laravel blade.

Это таблицы в базе данных:

город:

+----+--------+
| id | name   |
+----+--------+
|  1 | Vienna |
|  2 | Linz   |
+----+--------+

Почтовый индекс:

+----+---------+------+-------------+
| id | city_id | code | name        |
+----+---------+------+-------------+
|  1 |       1 | 1010 | 1. district |
|  2 |       1 | 1020 | 2. district |
|  3 |       1 | 1030 | 3. district |
|  4 |       2 | 4020 | Linz        |
+----+---------+------+-------------+

улица:

+----+--------+---------------+
| id | zip_id | name          |
+----+--------+---------------+
|  1 |      1 | Burgring      |
|  2 |      1 | Seilergasse   |
|  3 |      2 | Praterstrasse |
+----+--------+---------------+

заказы:

+----+---------+------+-----+--------+
| id | orderno | city | zip | street |
+----+---------+------+-----+--------+
|  1 | 100001  | 1    | 2   | 3      |
|  2 | 100002  | 1    | 1   | 2      |
|  3 | 100003  | 1    | 1   | 1      |
+----+---------+------+-----+--------+

Контроллер:

$orders = Order::all();
return view('orders-show', compact('orders'));

Blade :

@foreach($orders as $order)
    <tr>
        <td>{{$order->id}}</td>
        <td>{{$order->orderno}}</td>
        <td>{{$order->city}}</td>
        <td>{{$order->zip}}</td>
        <td>{{$order->street}}</td>
    </tr>
@endforeach

Результат: Result

Ожидаемый результат: expected result

Я верю в это это гораздо лучший способ, чем создать функцию просмотра для каждого элемента. Когда я читаю его, я полагаю, что через Модель можно соединить город, почтовый индекс и улицу, что-то вроде принадлежит и hasMany .

Кто-нибудь может мне помочь?

1 Ответ

0 голосов
/ 27 января 2020

Вы можете сделать это, используя отношения Один ко многим .

Прежде всего, обновите таблицу orders, чтобы правильно использовать Eloquent Relationships :

+----+---------+---------+--------+-----------+
| id | orderno | city_id | zip_id | street_id |
+----+---------+---------+--------+-----------+
|  1 | 100001  | 1       | 2      | 3         |
|  2 | 100002  | 1       | 1      | 2         |
|  3 | 100003  | 1       | 1      | 1         |
+----+---------+---------+--------+-----------+

1. Определите взаимосвязь между city и zip таблицами:

Добавьте это к вашей zip миграции таблицы:

$table->foreign('city_id')->references('id')->on('city')->onDelete('cascade');

Затем определите метод city() в вашем Zip модель класса:

public function city()
{
    return $this->belongsTo('App\City');
}

2. Определите отношения между zip и street таблицами:

Добавьте это к вашей street таблице миграции:

$table->foreign('zip_id')->references('id')->on('zip')->onDelete('cascade');

Затем определите метод zip() в вашем Street модель класса:

public function zip()
{
    return $this->belongsTo('App\Zip');
}

3. Определите взаимосвязь между таблицами city, zip, street и orders:

Добавьте эти строки в таблицу orders миграции:

$table->foreign('city_id')->references('id')->on('city');
$table->foreign('zip_id')->references('id')->on('zip');
$table->foreign('street_id')->references('id')->on('street');

Затем определите метод для каждого из этих отношений в вашем Order классе модели:

public function city()
{
    return $this->belongsTo('App\City');
}

public function zip()
{
    return $this->belongsTo('App\Zip');
}

public function street()
{
    return $this->belongsTo('App\Street');
}

4. Теперь используйте их в своем представлении (блейд):

@foreach($orders as $order)
    <tr>
        <td>{{ $order->id }}</td>
        <td>{{ $order->orderno }}</td>
        <td>{{ $order->city['name'] }}</td>
        <td>{{ $order->zip['code'] }}</td>
        <td>{{ $order->street['name'] }}</td>
    </tr>
@endforeach

Примечание: Имена таблиц по умолчанию во множественном числе в Laravel Eloquent. Если вы хотите, чтобы имена таблиц были единичными, не забудьте установить свойство $table внутри ваших моделей. Например, в вашем City классе модели:

protected $table = 'city';
...