Laravel 6.2: Laravel "с" не работает с условием - PullRequest
0 голосов
/ 19 марта 2020

Я работаю над проектом в Laravel 6.2. У меня две модели.

  1. Работа
  2. Компания

Что я хочу сделать, это получить все работы, где название должности соответствует something и company city равно something. Проблема в том, что он получает всю работу с компаниями, но если я укажу неправильный company city, он все равно получит записи. Короче говоря, состояние внутри with не работает. Что я сделал до сих пор:

Модель> Работа. php

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Job extends Model
{
    // user
    public function user()
    {
        return $this->belongsTo('App\User');
    }

    // company
    public function company()
    {
        return $this->belongsTo('App\Company');
    }
}

Модель> Компания. php

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Company extends Model
{
    // user
    public function user()
    {
        return $this->belongsTo('App\User');
    }

    // job
    public function job()
    {
        return $this->hasMany('App\Job');
    }
}

JobController> поиск

public function search(Request $request)
{
     $jobs = Job::where('title', 'like', '%' . $request->q . '%')
               ->with(['company' => function($q) use ($request) {
                    $q->where('city', $request->city);
                }])
                ->get();


     return view('jobs.view')->withJobs($jobs);
}

Ответы [ 2 ]

1 голос
/ 19 марта 2020

Попробуйте следующую функцию:

public function search(Request $request)
{
     $jobs = Job::where('title', 'like', '%' . $request->q . '%')
               ->with(['company'])
               ->whereHas('company',function($q) use ($request) {
                    $q->where('city', $request->city);
                })
                ->get();


     return view('jobs.view')->withJobs($jobs);
}
0 голосов
/ 19 марта 2020

в вашем контроллере!

public function search(Request $request)
{
   $jobs = Job::where('title', 'like', '%' . $request->q . '%')
           ->with(['company' => function($q) use ($request) {
                $q->where('city', $request->city)->get();
            }])
            ->get();


   return view('jobs.view')->withJobs($jobs);
}
...