Laravel связи с базой данных - PullRequest
1 голос
/ 25 января 2020

Например, у меня есть 3 таблицы:

Table A:
id 
name
Table B
id
name
tableA_id
Table C
id 
name
tableB_id

, и мне нужно отобразить все данные из таблицы A в таблице и имя из таблицы C, например:

id | name | TableC name

Я могу написать код для получения имени таблицы C, например:

        $data = DB::table('tableA')
            ->join('tableB','tableB.tableA_id','=','tableA.id')
            ->join('tableC','tableC.tableB_id','=','tableC.id')
            ->select('tableA.id','tableA.name','tableC.name')
            ->get();

Но если я хочу отобразить больше данных, какое подходящее решение можно решить, не делая запрос огромным и отделить его как-нибудь, чтобы его было проще отображать в блейде?

1 Ответ

1 голос
/ 25 января 2020

Просто используйте отношение HasMany, если ваше наименование не соответствует стандарту Laravel, если вы называете свои таблицы в форме множественного числа своей модели, вы можете избежать определения $table = 'a'. Ваш внешний ключ также не является стандартным, вы можете избежать второго параметра has many, если они названы, например, таблица b a_id. Прочитайте сообщение на нем

class A {
    protected $table = 'a';

    public function bs() {
        return $this->hasMany(B::class, 'tableA_id');
    }
}

class B {
    protected $table = 'b';

    public function cs() {
        return $this->hasMany(C::class, 'tableB_id');
    }
}

class C {
    protected $table = 'c';
}

В этом примере наименование странное, так как очень неудобно создавать множественные версии таблиц A, B и C.

Когда вы хотите получить доступ к отношению C, вы можете сделать это следующим образом, но отношения могут иметь несколько значений, поэтому описано, как это будет работать.

$a = A::find(1);
$cName = $a->bs->first()->cs->first()->name;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...