【问题标题】:How to update pivot table values automatically如何自动更新数据透视表值
【发布时间】:2017-08-29 14:35:17
【问题描述】:

我有两个单独的表 studentstutors。我还设置了带有两个值students_studentidtutors_tutid 的数据透视表students_tutors。在事情的流程中,客户想要为学生分配导师,反之亦然,添加它们或稍后编辑它们。所以一个学生可能有很多导师,一个导师可能有很多学生。现在,我希望在发生此类选择时自动更新数据透视表值。可以一次性分配多个导师/学生。我在数据透视表上自动更新时遇到困难。我对 Laravel 很陌生。任何人都可以建议如何去做以及使用什么代码以及在哪里更新枢轴值并在视图中显示。

我的add.blade.php 学生:

<select name="tutid" id="tutors" multiple>
    @foreach($tutors as $tutor)
        <option value="{{$tutor->tutid}}">{{$tutor->name}}</option>
    @endforeach
</select>

我的Student 模特:

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Student extends Model
{
    protected $primaryKey = 'studentid';

    public function user()
    {
        return $this->belongsTo(User::class);
    }

    public function Tutors()
    {
        return $this->belongsToMany(Tutors::class);
    }

    public function Invoices()
    {
        return $this->belongsToMany(Invoices::class);
    }
}

我的Tutor 模特:

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Tutor extends Model
{
    protected $guarded = [];

    protected $primaryKey = 'tutid';

    public function user()
    {
        return $this->belongsTo(User::class);
    }

    public function Students()
    {
        return $this->belongsToMany(Students::class);
    }
}

我的学生控制器add() 方法:

public function add(Student $student, Tutor $tutor)
{
    $students = Student::all();

    $tutors = Tutor::all();

    return view('students.add', compact('students', 'tutors'));
}

【问题讨论】:

  • 你能展示你到目前为止所做的事情吗?我的意思是模型和迁移。
  • 是的,请展示一些研究成果:)
  • @louisfischer 如果您想让stackoverflow.com/review/suggested-edits/17178443 获得批准,您可能需要标记该问题,因为您所指的 cmets 似乎无处可寻。
  • 连同我建议的编辑我将 cmets 标记为“不再需要”。发现这些标志很有帮助,因此我所指的 cmets 已被删除。

标签: laravel eloquent pivot-table


【解决方案1】:

您可以执行以下操作: 遍历所有学生 ID 或导师 ID 并分配它们, 例如,如果我们想将多个学生分配给一个导师:

$tutor = Tutor::find($id);
foreach($students_id as $student_id){

    $tutor->students()->attach($student_id);

}

请注意,您的导师模型中必须有关系(学生):

public function students(){
  return $this->belongsToMany('App\Student');
}

为学生做同样的操作!

【讨论】:

  • 谢谢@sletheren 和其他所有人。我做了一个噩梦,粘贴了我所做的事情。不要管那个。以我的价值观,它会变成这样:$tutor = Tutor::find($id); foreach($studentid as $studentid){ $tutor-&gt;students()-&gt;attach($studentid); 但是,我应该在哪里使用它?在我的 TutorsController 中的 store 方法中?
  • 问题是,它现在看起来像这样。 public function store(Request $request) { $tutor = New tutors; $tutor-&gt;user_id = auth()-&gt;id(); $tutor-&gt;studentid=request('studentid'); $tutor-&gt;name = request('name'); $tutor-&gt;contact = request('contact'); $tutor-&gt;subjects = request('subjects'); $tutor = Tutor::find($id);}
  • 另外,我希望挑选多个选定的学生/导师,这些是从各自添加视图的相关表格中挑选出来的。在那种情况下会起作用吗?
  • 我需要将这些值放在一个数组中吗?这种情况下的语法是什么?
  • 这个是的,这取决于你如何在前端实现它,你可以使用多选,然后它会自动发送一个数组到你的后端控制器,然后你应用我上面为你写的方法
猜你喜欢
  • 1970-01-01
  • 2019-04-04
  • 2017-06-10
  • 2015-08-12
  • 2018-02-26
  • 2018-12-30
  • 1970-01-01
  • 1970-01-01
  • 2019-11-05
相关资源
最近更新 更多