Я не могу сделать запрос с Laravel - PullRequest
0 голосов
/ 22 ноября 2018

Доброе утро У меня возникли проблемы при попытке создать простой запрос с Eloquent.

Это модель mi colonia:

class Colonia extends Model
{
    protected $table = 'catalogo_colonias';   

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

, если я это сделаю.

$response = Colonia::find(1)->city;

Я получаю ответ, но не хочу найти по идентификатору, я пытаюсь сделать что-то вроде этого.

$response = Colonia::where('codigo_postal', $codigo_postal)->city;

, но выдает ошибку.

Неопределенное свойство: Illuminate \ Database \ Eloquent \ Builder :: $ city

и оно объявлено выше, как вы можете видеть, я думаю, что это проблема синтаксиса, надеюсь, вы могли бы мне помочь.

Спасибо, привет.

Ответы [ 4 ]

0 голосов
/ 24 ноября 2018

На основании ответа @HCK объяснил, как выполнить результаты запроса.Здесь я просто хочу улучшить способ возврата значения столбца напрямую.

$response = Colonia::where('codigo_postal', $codigo_postal)
    ->value('city');

Документация Laravel

0 голосов
/ 22 ноября 2018

Проблема в вашем коде в том, что Colonia::where() возвращает построитель запросов.Вам нужно извлечь его, используя метод first(), например:

$response = Colonia::where('codigo_postal', $codigo_postal)->first()->city;

Вы можете извлечь информацию из запроса двумя способами: first() и get().first() возвращает только первый найденный элемент, а get() возвращает массив с целыми результатами.

Я рекомендую прочитать Laravel Query Builder - Where Clauses

0 голосов
/ 22 ноября 2018

Не волнуйся.Это легко исправить.Вы указали столбец, по которому вы хотите искать.Но Eloquent не выполнил ваш запрос.

Если вы используете Model::where('col', $value'), вы должны указать:

  1. Хотите ли вы вернуть одну строку модели?Если это так, вы можете использовать first() ps, он вернет первое найденное, поэтому, если вы пытаетесь найти имя с Бобом, и у вас есть записи Bob1, Bob2, Bob3, он сначала вернет Bob1.

  2. Если вы хотите вернуть все строки в вашем запросе, вы можете использовать get().Вам понадобится foreach ваша коллекция, чтобы получить доступ к продаже в каждом экземпляре.

Затем вы сможете получить доступ к свойству отношений.

Удачи!

0 голосов
/ 22 ноября 2018

Когда вы делаете:

$response = Colonia::find(1)->city;

Метод find() возвращает результат запроса, в данном случае первый объект таблицы catalogo_colonias.Один объект, у этого объекта есть все ваши определенные свойства, например, отношение city.

Теперь, когда вы вместо этого используете метод where(), он по-прежнему не извлекаетобъектов отношений пока нет, потому что в некоторых случаях вы хотели бы продолжать ограничивать запрос.Вместо этого он возвращает экземпляр класса Query Builder .Вот почему он выдает ошибку:

$response = Colonia::where('codigo_postal', $codigo_postal) // return query builder
                 ->city; // this property isn't defined in the builder, hence, the error.

Чтобы получить результат, вам нужно добавить get() (чтобы получить все результаты, соответствующие запросу) или first() или т. Д.

$response = Colonia::where('codigo_postal', $codigo_postal) // query builder
                 ->first() // returns an instance of Colonia
                 ->city; // now it can access the model properties.
...