错误在尝试同步数据透视表时调用未定义的方法stdClass :: volunteers()

时间:2017-08-21 18:36:12

标签: php laravel

我有一个数据透视表,我正在尝试同步该表,但它不断抛出FatalError: Call to undefined method stdClass:: volunteers(),我正在使用PHP7和Laravel5。

我的控制器:

public function update(Request $request, $id)
{
    ........

        $show = DB::table(Config::get('constants.tables.ShowsTable'))
        ->where(Config::get('constants.fields.ShowsIdField'), $id)
        ->first();

        if(!empty($request -> volunteer_id)){
                $show -> volunteers() 
                -> sync($request -> volunteer_id);
        }

            ............

我的模特:

class Show extends Model {

     protected $table = 'shows';

     protected $fillable = ['name','description','schedule','image'];

     public function volunteers(){
        return $this -> belongsToMany('App\Volunteer')
        ->withTimestamps();
     }
   }

Migrartion:

Schema::create('show_volunteer',function(Blueprint $table){
        $table->integer('show_id')->unsigned();
        $table->integer('volunteer_id')->unsigned();

        $table->primary(['show_id', 'volunteer_id']);
        $table->foreign('show_id')->references('show_id')
        ->on('shows')->onDelete('cascade');
        $table->foreign('volunteer_id')->references('volunteer_id')
        ->on('volunteers')->onDelete('cascade');

        $table->timestamps();
});

提前致谢!!!

1 个答案:

答案 0 :(得分:0)

$show是一个结果集,而不是Model类的实例。

您可以使用hydrate()功能。

$myModel = Show::hydrate($show);
$myModel->volunteers()->sync($request -> volunteer_id);

也许你需要指向零指数。但不确定。

或者您可以从头开始使用Eloquent,而不是DB::table