我有一个数据透视表,我正在尝试同步该表,但它不断抛出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();
});
提前致谢!!!
答案 0 :(得分:0)
$show
是一个结果集,而不是Model
类的实例。
您可以使用hydrate()
功能。
$myModel = Show::hydrate($show);
$myModel->volunteers()->sync($request -> volunteer_id);
也许你需要指向零指数。但不确定。
或者您可以从头开始使用Eloquent,而不是DB::table