用于多个内部联接的Laravel模型方法

时间:2019-07-05 01:51:41

标签: sql database laravel model

我正在为学生排课创建一个应用程序。 在我的应用中,我只想获取ID为1并具有时间表详细信息的学生时间表。

我有3个表:Student_Schedules,Schedule,Schedule_details

表格如下:

学生时间表:id,schedule_id

Schedule_details :ID,schedule_id

时间表:ID

这是数据库查询:

Shape

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

3 个答案:

答案 0 :(得分:1)

您的问题的答案是,可以使用模型方法。您的表将需要三个Eloquent模型。 它们是Schedule,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文件中,创建与计划模型的关系:

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

,然后将查询替换为:

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

这里的a link是为了更好地理解laravel Eloquent模型关系。

希望它会对您有所帮助。

答案 1 :(得分:0)

好,我已经阅读了您的帖子。 laravel雄辩的关系非常重要,这是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');
    }
}

上述示例意味着您不通过在Schedules模型对象结果上使用函数Student_Schedules来联接两个表并使用计划信息

2。然后您可以使用他们的关系模型对象

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

更多信息,请联系。谢谢...

答案 2 :(得分:0)

在幼虫中,雄辩的关系在性能和准确性上总是好的。您还必须使用如下关系-

您有三个表-

  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雄辩的关系。

我希望它将对您有帮助