Я пытаюсь реализовать модель критериев на основе этого пакета.
Если я нажимаю следующие критерии, которые выполняют соединение и извлекают необходимые столбцы, предполагается, что он выполняет один запрос. Но он выполняет два запроса
select `products`.`product_name`, `skus`.`quantity` from `products` inner join `skus` on `skus`.`products_id` = `products`.`products_id` where `products`.`products_id` = '1'380μshomestead
select * from `products` where `products`.`products_id` = '0' limit 1
Почему он выполняет два запроса, а мне нужно выполнить только первый?
Примеры кода следующим образом
Контроллер
public function __construct(ProductRepository $product_repository){
$this->product_repository = $product_repository;
}
public function all()
{
$data = $this->product_repository->getByCriteria(new GetProduct());
$product = $this->product_repository->find('1');
}
Репозиторий критериев
class getProduct implements CriteriaInterface {
public function apply($model, RepositoryInterface $repository)
{
$model = $model
->select('products.product_name', 'skus.quantity')
->where('products.products_id', '1')
->join('skus', 'skus.products_id', '=', 'products.products_id');
return $model;
}
}
dd($data) дал следующее
Collection {#300 ▼
#items: array:2 [▼
0 => Product {#301 ▼
#primaryKey: "products_id"
#fillable: []
#connection: null
#table: null
#perPage: 15
+incrementing: true
+timestamps: true
#attributes: array:2 [▶]
#original: array:2 [▶]
#relations: []
#hidden: []
#visible: []
#appends: []
#guarded: array:1 [▶]
#dates: []
#dateFormat: null
#casts: []
#touches: []
#observables: []
#with: []
#morphClass: null
+exists: true
+wasRecentlyCreated: false
}
1 => Product {#302 ▼
#primaryKey: "products_id"
#fillable: []
#connection: null
#table: null
#perPage: 15
+incrementing: true
+timestamps: true
#attributes: array:2 [▶]
#original: array:2 [▶]
#relations: []
#hidden: []
#visible: []
#appends: []
#guarded: array:1 [▶]
#dates: []
#dateFormat: null
#casts: []
#touches: []
#observables: []
#with: []
#morphClass: null
+exists: true
+wasRecentlyCreated: false
}
]
}
->select('products.product_name', 'skus.quantity')
? 08.12.2015public function __construct($string){ $this->columns = $string; }
, затем измените критерии, чтобы добавить эти строки в качестве столбцов при выборе. Когда вы используете свои критерии в контроллере, просто используйтеpushCriteria(new GetProduct(['column1', 'column2']));
, это может сработать 08.12.2015