Я очень новичок в Laravel, и у меня проблемы с поиском запросов в Eloquent. У меня две модели - ноутбук и местоположение. Предположим, я хочу запросить все ноутбуки, принадлежащие местоположению, имеющему значение «запаса» 1. В SQL это будет левое соединение, но как это сделать в Eloquent? Я уже добавил отношения к двум моделям, поэтому модель ноутбука имеет метод «местоположения», но куда мне идти?Запросы поиска в Eloquent ORM
ответ
Для этого можно использовать области запросов. Они тщательно задокументированы в Laravel documentation
В модели ноутбука вы можете написать простор для stockcheck:
public function scopeInStock($query)
{
return $query->where('stock', 1);
}
держать его в чистоте, то вы можете создать еще одно соотношение в модели Расположение:
public function laptopsInStock()
{
return $this->hasMany('Laptop')->inStock();
// or this way:
// return $this->laptops()->inStock();
}
Теперь извлечь результаты есть несколько вариантов:
//all laptops
$location->laptops;
// in stock only
$location->laptopsInStock;
// eager loading
$location->with('laptopsInStock')->get();
Столбец «сток» находится в таблице мест, а не таблице ноутбуков. Это моя проблема - я хочу, чтобы все ноутбуки были из всех мест, где стоимость акций одна. – daninthemix
Итак, все, что вам нужно: '$ laptops = Laptop :: inStock() -> get();' – trommelaap
Не работает, я получаю 'Column not found: 1054 Unknown column 'stock' in 'where clause' ' – daninthemix
Поскольку вы не предоставили никакого кода, поэтому я опишу из основного.
Миграции
Местоположение Таблица
Schema::create('locations', function(Blueprint $table){
$table->increments('id');
$table->string('name');
$table->timestamps();
});
ноутбуков Таблица
Schema::create('laptops', function(Blueprint $table){
$table->increments('id');
$table->string('name');
$table->integer('location_id')->unsigned();
$table->integer('stock');
$table->timestamps();
$table->foreign('location_id')
->references('id')
->on('locations')
->onDelete('cascade')
->onUpdate('cascade');
});
Модели
Местоположение Модель
class Location extends Model {
public function laptops(){
return $this->hasMany('\App\Laptop');
}
}
ноутбук Модель
class Laptop extends Model {
public function location(){
return $this->belongsTo('\App\Location');
}
}
Если вы создали приложение, как это, то есть несколько способов для достижения этой цели.
Это запросит весь ноутбук, принадлежащий местоположению, и имеет значение запаса 1
.
1.
Laptop::where('location_id','some_location_id')->where('stock',1)->get();
Location::where('id','some_location_id')->with(['laptops' => function($query){
$query->where('stock',1);
}])->get();
Я надеюсь, что это позволит решить вашу проблему. Не стесняйтесь комментировать и задавать любой вопрос, который у вас есть.
Спасибо за ответ. У меня нет внешнего ключа в миграции - у меня создалось впечатление, что достаточно описать атрибуты belongsTo и hasMany в моделях? В конечном счете, я хочу вернуть начальное представление, которое захватывает все ноутбуки из мест запаса, но этот запрос станет намного сложнее, позволяя пользователю фильтровать любую комбинацию модели, типа, местоположения и т. Д. У меня есть аналогичный -нормальные отношения с моделью. – daninthemix
И просто добавить этот код в настоящее время '$ laptops = Laptop :: where ('stock', 1) -> get();' создает ошибку, не найденную в столбце. Изменить: для дальнейшего уточнения, я не хочу ограничивать результаты в определенном месте - мне нужны результаты из всех местоположений, имеющих значение запаса 1. И/или я хочу получить результаты от всех моделей ноутбуков, соответствующих выбору пользователя. – daninthemix
Ошибка 'column not found' связана с тем, что вы пытаетесь получить доступ к столбцу, который не существует в таблице. – imrealashu
- 1. Laravel, Eloquent Отношение n: m
- 2. Laravel Eloquent: Добавить запросы
- 3. Обратные запросы поиска в Laravel
- 4. Eloquent запросы на 2 таблиц
- 5. Laravel Raw запросы и Eloquent ОРМ отношение
- 6. Laravel Eloquent ORM - комплекс, где запросы
- 7. Объединить запросы с использованием Eloquent Builder
- 8. Eloquent ORM: похожие запросы с одинаковой переменной
- 9. Запросы поиска для Gerrit
- 10. Оптимизация Django: вложенные запросы и запросы поиска
- 11. Eloquent: запросы моделей в зависимости от отношений модели
- 12. , работающий с m: m отношениями в красноречивом внешнем laravel
- 13. MATLAB m-функция для поиска локальных экстремумов
- 14. Сценарий поиска не возвращает запросы
- 15. Исполнительные множественные запросы упругая поиска
- 16. SQL запросы для поиска билета
- 17. Linq Запросы для поиска пользователя
- 18. Запросы на поиск эластичного поиска
- 19. Laravel Eloquent: упорядочить результаты поиска по полю в связанной таблице
- 20. Используйте Eloquent или Laravel для поиска предметов в двух колонках
- 21. Laravel Eloquent - Как создавать запросы с подзапросом, и если satement
- 22. Как сделать запросы из подзапросов на Eloquent/Laravel
- 23. Сложные соединения в Eloquent
- 24. Метод дросселирования вызывает M-запросы за N секунд
- 25. Именованные запросы в Vim?
- 26. laravel eloquent search search
- 27. '86^M^\^M ', что такое знак M в этой строке
- 28. Матричное умножение странно в numpy (m * m равно m.dot (m) !!!)
- 29. Внедрение m-m или 1-m отношений в JPA
- 30. Сохранять запросы от поиска AJAX autosuggest
Можете ли вы показать нам структуру таблицы и код вашей связи? – James
да, пожалуйста, опубликуйте также свою структуру db – GiuServ