Объеденение таблиц laravel

191
21 апреля 2019, 16:00

Имею две таблицы
Users(id, name, country)
Countries(id, country, city)
Как мне правильно сформировать запрос чтобы получить в массиве id,name,country, city? Пробовал через hasOne в модельке Users

public function country(){
        return $this->hasOne('App\Countries', 'country', 'country');
    }  

В котроллере

Users::orderBy('id', 'desc')->country()->get();  

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

Answer 1

1) Не country, а country_id. И не country, а name. По хорошему надо и city выносить в отдельную страницу.

Users(id, name, country_id)
Countries(id, name, city)

2) Соответственно модель. Модель должны быть в единственном числе - название файлов модели и классов модели. Всё в единственном. А названия таблиц в БД - во множественном. Почитайте про соглашения имён в laravel

public function country()
{
    return $this->hasOne('App\Country');
}

3) Запрос. Если вы хотите получить и данные из таблицы users, и данные из таблицы countries, тогда так (опять же - модели в единственном числе)

User::orderBy('id', 'desc')->with('country')->get();

with() - добавляет данные по запрошенной связи к результату запроса в виде подмассива.

Касательно обратной связи - это не обязательно. Указываете только те связи, которые используете.

Если вы следуете соглашению по именованию, то вы себе сильно упрощаете жизнь. Для кого вообще делают курсы? Субтитры присутствуют.

READ ALSO
Как добавить товар в корзину?

Как добавить товар в корзину?

Пытаюсь сделать на PHP добавление товара в корзинуЯ присваиваю кнопке атрибут name с id из бд(выглядит это так name="tovar<тут подставляется id>")...

134
Не работает exec

Не работает exec

1)Когда пытаюсь вызвать exec из одного скрипта другой, он не запускает его, хотя из командной строки запускает скрипт2) Также не могу убивать...

160
Тестирование. Как отменить запись в БД при прогоне теста? Laravel

Тестирование. Как отменить запись в БД при прогоне теста? Laravel

При прогоне тестов (CRUD) нужно удалять (или отменять) запись в БД, что бы не лезть руками каждый раз в тест и не переписывать id для всех методов

177
Как обработать такой массив на php

Как обработать такой массив на php

в качестве value в цикле

211