Laravel 5.2如何从belongsTo关系中删除父记录?

时间:2016-10-24 07:14:50

标签: laravel

我的定价模式

protected $fillable = [
    'zone_id',
    'is_short_time',
    'is_service_feeder',
    'route_id',
    'value',    
];

public function route()
{
    return $this->belongsTo(Route::class);    
}

我的路线模型

protected $fillable = [
    'zone_id',
    'from_city_id',
    'to_city_id',
    'is_in_the_city',    
];

public function pricing(){
    return $this->hasOne(Pricing::class);    
}

这是我的控制器

public function feeder_destroy($zoneid, $pricingfeederid)
{
    $pricing_feeder = Pricing::find($pricingfeederid)->where('zone_id', $zoneid)->where('is_service_feeder', 1);
    $pricing_feeder->route()->delete();
    $pricing_feeder->delete();
}

错误说

Call to undefined method Illuminate\Database\Query\Builder::route()

我也想删除定价记录和路线记录。

我的代码有什么问题?应该怎么样?

任何帮助表示感谢。

5 个答案:

答案 0 :(得分:1)

您的控制器应该

$pricing_feeder = Pricing::find($pricingfeederid)->where('zone_id', $zoneid)->where('is_service_feeder', 1)->first();

最后不要忘记first()

然后使用$pricing_feeder->route->delete();

答案 1 :(得分:0)

尝试此操作... $pricing_feeder->route->delete();()

中删除route()

您的错误发生在relation,而不是Parent

答案 2 :(得分:0)

不是最高级的,但您可以通过将此方法添加到路线模型

来删除定价附带的路径
public function delete()
{
    // delete all related pricing 
    $this->pricing()->delete();

    // delete the route as well
    return parent::delete();
}

然后只需致电$pricing_feeder->route->delete();

答案 3 :(得分:0)

好的,我有这种模特关系

发布模型

public function user(){
    return $this->belongsTo(User::class);
}

用户模型

public function post(){
    return $this->hasMany(Post::class);
}

以下代码删除了所有帖子和用户

$user = \App\User::findOrFail(1);
$user->post[1]->delete();
$user->delete();

答案 4 :(得分:0)

您的代码不起作用,因为您需要添加first()方法调用:

    $pricing_feeder = Pricing::find($pricingfeederid)->where('zone_id', $zoneid)->where('is_service_feeder', 1)->first();

如果为null,我将检查返回的对象。如果不是,那么您也可以删除相关关系和模型。

此外,调用delete()方法时,请使用以下关系:

    $pricing_feeder->route->delete();