Laravel - передать фильтр на модель - PullRequest
0 голосов
/ 28 января 2019

Мне нужна помощь здесь.По сути, есть две таблицы (tblplayers & tblmatches).Не каждый игрок существует в матчах.Мой контроллер имеет следующий код:

use App\Model\Players;
use App\Model\Matches;
use Illuminate\Support\Facades\DB;

class PlayersController extends Controller
{
public function index(Request $request) {
$players = Players::select('*');

Я хотел бы изменить свое утверждение select выше, чтобы оно возвращало только тех игроков, которые также существуют в tblmatches (где tblmatches.P1_ID = tblplayers.ID).

Что я делаю ниже?

$players = Players::addSelect(DB::raw('(SELECT * from tblmatches where (P1_ID = ID))'));

Должен ли я вместо этого менять модель?Спасибо за вашу помощь.

Ответы [ 3 ]

0 голосов
/ 28 января 2019

Вы должны определенно установить отношение между двумя таблицами.Это сделало бы дела, подобные этому, намного проще в обращении.

Однако, то, что вы ищете, это, по сути, WHERE EXISTS.Итак, что-то вроде следующего должно сделать свое дело.

$players = Players::whereExists(function ($query) {
        $query->select(DB::raw(1))
            ->from('tblmatches')
            ->whereRaw('tblmatches.player_id = tblplayers.id');
    })
    ->get();

Я предположил, что у вас есть эти два поля в whereRaw(), но вы должны изменить их соответствующим образом.

whereRaw('tblmatches.player_id = tblplayers.id');

Впрочем, обязательно взглянем на отношения :)

0 голосов
/ 28 января 2019

Проверьте эту ссылку.https://laravel.com/docs/5.7/queries

 protected $table = 'tblplayers';
   public function fetchPlayers ($data) {
    $players =  DB::table($this->table)
   // you can filter it by Boolean expression using where 
    ->where('status', '<>', 1)
   // you can group by
    ->groupBy('status')
    ->get();
    return $players;
  }
0 голосов
/ 28 января 2019

Добавьте отношение один ко многим (подробности здесь ) к вашей модели игрока (и, вероятно, также к вашей модели матчей)

public function matches()
{
    return $this->hasMany('App\Model\Matches');
}

И запрос это по

$players = Players::has('matches')->get();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...