как сделать выборку из бд с использованием отношений laravel

Рейтинг: 0Ответов: 1Опубликовано: 19.04.2023

Я составил такой запрос в БД.

<?php

namespace App\Http\Controllers;

use App\Models\Person;
use Illuminate\Http\Request;

class NotebookController extends Controller
{
    public function index(){
        \DB::connection()->enableQueryLog();
        $data = Person::query()
        ->select(['name', 'surname'])
            ->with('phone:number')
            ->get();
        dd(\DB::getQueryLog(), $data);
        return view('notebook.index');
    }
}

Отношения моделей Person<-Phone

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;

class Person extends Model
{
    use HasFactory;
    public function phone(){
        return $this->hasOne(Phone::class);
    }
}




<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;

class Phone extends Model
{
    use HasFactory;
    public function user(){
        return $this->belongsTo(Person::class);
    }
}

Сформированый запрос выглядит так: введите сюда описание изображения

Подскажите пожалуйста, могу ли я ввести ограничения на выборку данных для таблицы people и получить данные о phone.number

Ответы

▲ 0
<?php

namespace App\Http\Controllers;

use App\Models\Person;
use Illuminate\Http\Request;

class NotebookController extends Controller
{
    public function index(){
        \DB::connection()->enableQueryLog();
        $dataPeople = Person::query()
            ->select(['id','name', 'surname']) // надо запросить id
            ->with('phone:number,person_id') // надо запросить person_id без него не работает
            ->get();
        dd($dataPeople);
        return view('notebook.index', compact('dataPeople'));
    }
}