Laravel 4 Laravel 4-软删除和外键参考

Laravel 4 Laravel 4-软删除和外键参考,laravel-4,Laravel 4,最好的方法是什么,例如: 我有一个城市,有很多人的关系 如果出于任何原因,我需要删除某个城市(使用软删除),则某些人可能会丢失该城市id引用。这会使Laravel显示错误消息“尝试获取非对象的属性” 我需要将丢失城市参考的人员显示为无误。 当我写这样的东西时 echo isset($person->city) ? $person->city->name : ''; 它很管用,但在我看来有点难看 我刚写的时候 echo $person->city->name; 我

最好的方法是什么,例如:

我有一个城市,有很多人的关系

如果出于任何原因,我需要删除某个城市(使用软删除),则某些人可能会丢失该城市id引用。这会使Laravel显示错误消息“尝试获取非对象的属性”

我需要将丢失城市参考的人员显示为无误。

当我写这样的东西时

echo isset($person->city) ? $person->city->name : '';
它很管用,但在我看来有点难看

我刚写的时候

echo $person->city->name;
我收到一条“尝试获取非对象的属性”消息,因为该城市已被删除


Laravel是如何处理的?

要获取所有模型和软删除模型,请在您的个人模型中的城市关系方法中添加以下内容

public function cities(){
    return $this->belongsTo('Cities\Model\Path')->withTrashed();
}

马特伯罗的工作很好。正是我需要的。就我而言,我只是换了很多东西

Models/Person.php

class Person extends \Eloquent {

    public function city(){
        return $this->belongsTo('City')->withTrashed();
    }
}

laravel用于将cities对象附加到person对象的查询将检查delete_at字段是否为空。如果为空,则该行已被软删除,并且不会出现在结果中。为了解决这个问题,你需要做一些混乱的事情。谢谢@MattBurrow。也许我需要用另一种方式来构建它。在cities表中使用一些字段,如“status:enum('active','inactive'),以提供在html datagrid persons中显示旧的“已删除”城市,并在cities datagrid中隐藏非活动城市的maner。您可以在关系方法中使用
withTrashed()
将软删除结果包括在查询中。这将包括所有软删除模型,即您案例中的城市。然后这将允许您使用
$person->city->name
。哇!你救了我一天,呵呵。使用withTrashed()解决了问题。我有一些模型需要保留旧的参考,这样会很容易。对你来说是个好日子。我会补充一句作为回答。