如何避免添加element.Laravel,PHP的重复

时间:2017-03-16 12:37:51

标签: php mysql laravel web

很快,有老师,我必须附上课程。每门课程只应加一次(不是两次)。我的代码正在运行,但仅适用于元素 id = 1 其他课程可以多次附加到教师 即可。我在laravel中编写代码。 (PHP)。 我无法理解为什么它只适用于第一个元素(课程($ id = 1))。 你能帮我吗。我的错在哪里?先感谢您。 这是我的代码。对于一位教师,应该附上许多不同的课程。但是没有一门课程两次!

public function addCourse($id, Request $request) {
        $teacher = Teacher::findOrFail($id);
        if($teacher->has('courses')->where('id', $request->get('course_id'))->get()->isEmpty()) {
            $teacher->courses()->attach($request->get('course_id'));

        }
         else {
            flash()->error('This Course has been added already!')->important();
        }


        return back();
    }

3 个答案:

答案 0 :(得分:1)

我相信你的查询方式存在问题。

当你这样做时......

$teacher->has('courses')->where('id', $request->get('course_id'))

->where()仍在查看teachers表,而不是课程表。我认为你真正想做的是使用whereHas来确定老师是否有这样的课程。

$hasCourse = Teacher::whereHas('courses', function($q) use ($request) {
    // Here we can add constraints on the courses table
    $q->where('id', $request->get('course_id'));
})->where('id', $id)->exists();

if (! $hasCourse) {
    $course = Course::findOrFail($request->get('course_id'));
    $course->teacher()->associate($id);
}

答案 1 :(得分:1)

问题已解决。我用了

  

$teacher->courses()->sync([$request->get('course_id')],$detaching = false);

最后我有这个脚本:

> public function addCourse($id, Request $request) {
>         $teacher = Teacher::findOrFail($id);
>         $teacher->courses()->sync([$request->get('course_id')],$detaching =
> false);
>         
>         return back();
>     }

谢谢大家。

答案 2 :(得分:0)

附加一对多

$teacher = Teacher::findOrFail($id);
$course = Course::findOrFail($request->get('course_id'));

$course->teacher()->associate($teacher);;
$course->save();