方法医院不存在

时间:2017-11-11 13:38:31

标签: php laravel-5 laravel-5.4

嘿,我正在开展一个项目,在这个项目中,我已经定义了两个表之间的多对多关系。我在模型类中创建了一个方法但是每当我从我的控制器调用该方法时它就会给我错误方法不存在。下面是我的控制器和模型代码。

控制器

if($request->hospitalId != null)
{
    $IdArray = explode(',', $request->hospitalId);
    $doc= DB::table('doctors')->where('doctorId', $request->doctorId)->get();
    foreach ($IdArray as $Id) {
        $doc->hospitals()->attach($Id);
    }
}

模型

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

数据透视表

<?php

use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;

class CreateDoctorHospitalTable extends Migration
{
     public function up()
     {
          Schema::create('doctor_hospital', function (Blueprint $table) {
              $table->increments('id');
              $table->string('doctor_id');
              $table->foreign('doctor_id')->references('doctorId')->on('doctors')->onDelete('cascade');
              $table->string('hospital_id');
              $table->foreign('hospital_id')->references('hospitalId')->on('hospitals')->onDelete('cascade');
              $table->timestamps();
         });
     }


     public function down()
     {
         Schema::dropIfExists('doctor_hospital');
     }
}   

请让我知道我做错了什么。

2 个答案:

答案 0 :(得分:0)

问题在于您的查询,因为它返回一个数组,请尝试使用find方法:

$doc= App\Doctor::find($request->doctorId);

attach方法也可以接受一组id,这是一个例子:

if($request->hospitalId != null)
{
    $IdArray = explode(',', $request->hospitalId);
    $doc= App\Doctor::find($request->doctorId);
    $doc->hospitals()->attach($IdArray);
}

答案 1 :(得分:0)

如果您想从您的Eloquent模型访问您的关系,您需要使用模型本身而不是查询构建器。

更改

$doc= DB::table('doctors')->where('doctorId', $request->doctorId)->get();

$doc= Doctor::where('doctorId', $request->doctorId)->get();

假设您的模型名为Doctor