Necesito obtener el registro que no se ha unido tiene muchas tablas mi consulta como esta
$result = Recipes::select('id')->where("name", 'like', '%' . $item . '%') ->with(['categoryItem']) ->get();Y mi salida es
Array ( [0] => Array ( [id] => 1 [category_item] => Array ( [0] => Array ( [id] => 2 [foodable_id] => 1 [foodable_type] => Recipes [created_at] => 2017-04-14 16:18:22 ) ) ) [1] => Array ( [id] => 4 [category_item] => Array ( ) ) )Quiero obtener solo los registros que tienen detalles de categoría_elemento vacíos. en el siguiente ejemplo, quiero obtener el registro del índice 1, entonces, ¿cómo puedo dar una condición con la consulta?
Si te entendí correctamente y quieres obtener recetas que no tienen categoryItem , quieres usar el método doesntHave() :
Recipes::where('name', 'like', '%'.$item.'%') ->doesntHave('categoryItem') ->get(); Supongo que categoryItem es una relación definida ya que está tratando de usarlo en el método with() .
Hola Tal vez esto pueda ayudar. No olvide agregar en la parte superior de su archivo:
use DB;Y tu resultado será algo como esto.
$result = Recipes::select('id')->where("name", 'like', '%' . $item . '%') ->whereHas('categoryItem', function($q) { $q->where(DB::raw('count(*)),'>', 0); })->get();
No probé la función de conteo, espero que esto funcione, buena suerte con eso.