【发布时间】:2017-04-27 08:31:30
【问题描述】:
我有两个数据库表 journeys 和 stops 以多对多关系关联。还有关系的第三个表journey_stop(数据透视表)。
型号
这是我的Journey.php 模型:
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class Journey extends Model
{
public function stops() {
return $this->belongsToMany('App\Stop');
}
}
和Stop.php 模型:
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class Stop extends Model
{
public function journeys(){
return $this->belongsToMany('App\Journey');
}
}
控制器
现在在我的控制器中,我编写了一个方法 changeStop(stop, journey_id),它采用特定的 journey_id 并为其分配一个停止。(即,在特定的 stop 和 journey 之间创建关系)或从journey 中删除stop(如果它已经存在)。
方法如下:
public function changeStop(Request $request, $id)
{
$stop = $request->all();
$journey = Journey::find($id);
if ($journey->stops()->contains($stop->id)) {
$journey->stops()->detach($stop->id);
}else{
$journey->stops()->attach($stop->id);
}
return $journey->stops();
}
但是带有if 语句的行会抛出错误:
试图获取非对象的属性
我也尝试过使用DB 直接查询数据透视表,但它会引发同样的错误。这是DB的代码:
public function changeStop(Request $request, $id)
{
$stop = $request->all();
$journey = Journey::find($id);
if (
DB::table('journey_stop')->where(
'journey_id',
$id
)->where(
'stop_id',
$stop->id
)->count() > 0
) {
$journey->stops->detach($stop->id);
} else {
$journey->stops->attach($stop->id);
}
return $journey->stops();
}
一切似乎都适合我。但它不起作用。我做错了什么?
感谢您的宝贵时间:)
【问题讨论】:
标签: php laravel-5 eloquent many-to-many