Laravel: Как запросить данные из нескольких таблиц? - PullRequest
0 голосов
/ 04 июня 2018

БД имеет 3 таблицы chars, tags и chars_tags

chars имеет следующие столбцы:

id | char_name

теги имеют следующие столбцы:

id | tag_name

В chars_tags есть следующие столбцы:

id | char_id | tag_id

Я всегда использую приведенный ниже код для получения данных, потому что в прошлый раз в таблице char был другой столбец с именем tag_id, теперь они удаляют столбец tag_id и изменяютэто сводная таблица, которая называется 'chars_tags'

$char = chars::where('id', '=', 1)
     ->with('tags:id,tag_name')
     ->get();

Так как же теперь получить символ с тегом?

Ответы [ 2 ]

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

Сначала настройте свои модели, используя отношения «многие ко многим» между символами и тегами

class Char extends Model
{
    public function tags()
    {
        return $this->belongsToMany(Tag::class, 'chars_tags', 'char_id');
    }
}

class Tag extends Model
{
    public function chars()
    {
        return $this->belongsToMany(Char::class, 'chars_tags', 'tag_id');
    }
}

Теперь вы можете загружать связанные теги с символами

$char = Char::with('tags')
            ->where('id', '=', 1) 
            ->get(); 

или использоватьfind() если вам нужен один объект

$char = Char::with('tags')->find(1); 
0 голосов
/ 04 июня 2018

Вы также можете использовать объединения SQL: https://laravel.com/docs/5.6/queries#joins 1

DB::table('chars')
->where('chars.id', 1)
->leftJoin('chars_tags', 'chars_tags.char_id', '=', 'chars.id')
->leftJoin('tags', 'tags.id', '=', 'chars_tags.tag_id')
->get();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...