Модельный подход Laravel для множественного внутреннего соединения - PullRequest
0 голосов
/ 05 июля 2019

Я создаю приложение для планирования работы студентов. В моем приложении я хочу получить только расписание учеников с идентификатором 1 и подробностями его расписания.

У меня есть 3 таблицы: Student_Schedules, Расписания, Schedule_details

Таблицы выглядят так:

Student_Schedules : id, schedule_id

Schedule_details : id, schedule_id

Расписания : id

Итак, это запрос к базе данных:


$schedule = DB::table('Student_Schedules')
        ::join('schedules', 'Student_Schedules.schedule_id', '=', 'schedules.id')
        ->join('schedule_details', 'schedules.id', '=', 'schedule_details.schedule_id')
        ->where('Student_Schedules.id', '=', 1)
        ->get('Student_Schedules.*');

Поскольку я не очень хорош в красноречивых отношениях. Можно ли использовать модельный подход данного запроса с множественным внутренним объединением. Любая помощь приветствуется:>

Ответы [ 3 ]

1 голос
/ 05 июля 2019

Ответ на ваш вопрос: да, можно использовать модельный подход. Вам понадобятся три модели Eloquent для ваших столов. которые являются Расписание, StudentSchedule, ScheduleDetail. Вы можете создать его с помощью следующей команды:

php artisan make:model Schedule
php artisan make:model StudentSchedule
php artisan make:model ScheduleDetail

Теперь в файле Schedule.php создайте его связь с StudentSchedule, модель ScheduleDetail

public function studentSchedule()
{
    return $this->hasMany(StudentSchedule::class, 'schedule_id');
}

public function scheduleDetail()
{
    return $this->hasOne(ScheduleDetail::class, 'schedule_id');
}

Теперь в файле StudentSchedule.php создайте его связь с моделью Schedule:

public function schedule()
{
    return $this->belongsTo(Schedule::class, 'schedule_id');
}

и замените ваш запрос на:

StudentSchedule::with(['schedule' => function ($query) {
        $query->with('scheduleDetail');
    }])->where('id',1)->first();

Вот ссылка , чтобы лучше понять отношения модели Eloquent.

Надеюсь, это поможет вам.

0 голосов
/ 05 июля 2019

В Laravel использование красноречивых отношений всегда хорошо с точки зрения производительности и точности. Вы также должны использовать отношения следующим образом -

У вас есть три стола-

  1. расписания
  2. студенческие расписания - внешний ключ с расписаниями
  3. сведения о расписании - внешний ключ с расписаниями

Я предполагаю, что у вас есть таблица студентов, чей идентификатор занесен в таблицу расписаний студентов - У нас будут красноречивые отношения, такие как

1) Модель расписания

public function studentSchedules(){
 return $this->hasMany(StudentSchedule::class,'schedule_id');
}

public function scheduleDetail(){
 return $this->hasMany(ScheduleDetails::class,'schedule_id');
}

Теперь вы можете использовать эти отношения в своей логике

$schedules = Schedule::all(); /** conditional data must be used always */
foreach($schedules as $key => $schedule){
 $schedules[$key]->details = $schedule->scheduleDetail;
 $schedules[$key]->studentDetail = $schedule->studentSchedules;
}

и т. Д. Вы можете использовать и другие отношения. Отношения Laravel с более оптимизированными запросами, поэтому мы должны сначала отдать предпочтение отношениям Laravel.

Надеюсь, это поможет вам

0 голосов
/ 05 июля 2019

хорошо, я прочитал ваш пост. С laravel eloquent отношения очень важны, это еще одна особенность laravel, поэтому вы можете использовать модель базы данных для каждой таблицы или модуля. Ответ следует следующим образом:

  1. Перенос таблицы базы данных. Когда вы делаете каждую модель, вы можете установить отношения между ними.

пример:

namespace App;

use Illuminate\Database\Eloquent\Model;

class Student_Schedules extends Model
{
    /**
     * Get the phone record associated with the user.
     */
    public function Schedules()
    {
        return $this->hasOne('App\Schedules');
    }
}

Приведенный выше пример означает, что вы не объединяете 2 таблицы и не используете информацию о расписании с помощью функции Schedules в Student_Schedules результат объекта модели

2. И тогда вы можете использовать их объект модели отношений,

$schedule = Student_Schedules ::find(1)->Schedules;

Больше информации, давай свяжемся. спасибо ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...