【问题标题】:Laravel withtrashed in a relationshipLaravel 在一段关系中失败了
【发布时间】:2016-11-17 19:48:20
【问题描述】:

我有一个 Order 模型和一个 Service 模型。

可以删除订单(软删除)。 我想列出所有订单、已删除和有效订单以及它所属的服务。

订单模型

class Order extends Model
{
    use SoftDeletes;

    protected $dates = ['deleted_at'];

    public function service ()
    {
        return $this->belongsTo('Service');
    }
}

服务模式

class Service extends Model
{
    public function order()
    {
        return $this->belongsToMany('Order');
    }
}

我尝试了什么:

$company=Company::with('orders.service'=>function ($query) {
        $query->withTrashed();
    },'services'])->where('id',$company->id)->get();

但这不会返回任何订单(现在我的数据库中只有 1 个已删除的订单)

有什么想法吗?

谢谢!!

【问题讨论】:

    标签: php laravel


    【解决方案1】:

    你可以使用

     public function order() {
         return $this->belongsToMany('Order')->withTrashed();
     }
    

    【讨论】:

    • 是的,但这也将始终返回所有已删除的订单。如果我不需要页面上已删除的订单怎么办?
    • 另一个我不引以为豪的 hacky 解决方案是定义 2 个关系,一个带有垃圾,另一个没有。
    【解决方案2】:

    首先,belongsToMany 关系总是与另一边的另一个 belongsToMany 关系相伴,所以你没有正确处理这些关系。

    如果您想要多对多关系,则两个模型都应该与另一个模型具有belongsToMany 关系,并且您必须有一个数据透视表。

    如果您想要一对多关系,则一个模型应具有belongsTo 关系,另一个模型应具有hasMany 关系。

    【讨论】:

    • @user3844579 请问,您能确认一下您想要的是哪种关系吗?
    • @user3844579 请用 canges 更新您问题的代码。另外,请解释您尝试过的代码以及您要实现的目标。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-08
    • 1970-01-01
    相关资源
    最近更新 更多