0

我正在为学生安排创建一个应用程序。在我的应用程序中,我只想获取 id 为 1 并具有其日程安排详细信息的学生日程安排。

我有 3 个表:Student_Schedules、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.*');

因为我不擅长 laravel 雄辩的关系。是否可以使用具有多个内连接的给定查询的模型方法。任何帮助表示赞赏:>

4

3 回答 3

1

您的问题的答案是可以使用模型方法。你的表需要三个 Eloquent 模型。它们是日程安排、学生日程安排、日程安排详细信息。您可以使用以下命令创建它:

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();

这是一个更好地理解 laravel Eloquent 模型关系的链接。

希望它会帮助你。

于 2019-07-05T05:30:05.887 回答
0

在 laravel 中使用 eloquent 关系在性能和准确性方面总是很好的。您还必须使用如下关系 -

你有三张桌子-

  1. 时间表
  2. 学生时间表 - 带有时间表的外键
  3. 时间表详细信息 - 带有时间表的外键

我假设您有一个学生表,其 id 放在学生日程表中 - 我们将拥有像这样的雄辩关系

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 eloquent 关系。

我希望它会帮助你

于 2019-07-05T04:53:21.357 回答
0

好吧,我已经阅读了你的帖子。用 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 个表并通过SchedulesStudent_Schedules模型对象结果上使用函数来使用计划信息

2.然后你可以使用他们的关系模型对象,

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

更多信息,让我们联系。谢谢...

于 2019-07-05T02:56:30.983 回答