Я пытаюсь отфильтровать результаты таблицы отношений.
public function read_projects_by_coords(Request $request)
{
$from_lat = $request->get("from_lat");
$to_lat = $request->get('to_lat');
$from_lng = $request->get('from_lng');
$to_lng = $request->get('to_lng');
$projects = Project::with(["details" => function($query) use ($from_lat, $from_lng, $to_lat, $to_lng){
return $query->where("details.lat", ">", $from_lat)
->where("details.lat", "<", $to_lat)
->where("details.lng", ">", $from_lng)
->where("details.lng", "<", $to_lng);
}])->get();
return response()->json($projects);
}
Но когда я запускаю приведенный выше details(child)
с пустым / нулевым результатом и родительская таблица / таблица проекта не фильтруется. Я возвращаю все ...
Например $projects = Project::with(["details"])->get();
это работает без проблем. Но когда я пытаюсь отфильтровать модель проекта с помощью where
внутри with()
, я не могу получить записи объекта detail
, а родительский элемент не фильтруется.
для всех, кто хочет увидеть модели родитель и ребенок
class Project extends Model
{
protected $table = "projects";
protected $guarded = [];
protected $with = ["details"];
public function details(){
return $this->hasOne("App\Models\Detail");
}
}
class Detail extends Model
{
protected $table = "details";
protected $guarded = [];
public function project(){
return $this->belongsTo("App\Models\Project");
}
}
Что мне не хватает?