Php Elevely处理从代码中不同位置出现的非对象错误的属性

Php Elevely处理从代码中不同位置出现的非对象错误的属性,php,laravel,error-handling,Php,Laravel,Error Handling,我的应用程序从另一个API编写的数据库读取数据,现在在一些奇怪的情况下(今天实际发生的情况),它编写了一个0的客户id,当然,这是不存在的 我正在寻找一个优雅的“从顶部”模型,甚至是演示者解决方案来处理不存在的错误ID 因此,我不是在我的应用程序中查找每个$whatever->customer->id,然后在isset()/empty()三元函数中写入,而是希望以一种更优雅的方式消除这个错误,任何customer实例化/雄辩对象都会将字符串“NA”发送到一个不存在的对象,因此,即使是email/

我的应用程序从另一个API编写的数据库读取数据,现在在一些奇怪的情况下(今天实际发生的情况),它编写了一个0的客户
id
,当然,这是不存在的

我正在寻找一个优雅的“从顶部”模型,甚至是演示者解决方案来处理不存在的错误ID

因此,我不是在我的应用程序中查找每个$whatever->customer->id,然后在
isset()
/
empty()
三元函数中写入,而是希望以一种更优雅的方式消除这个错误,任何
customer
实例化/雄辩对象都会将字符串“NA”发送到一个不存在的对象,因此,即使是email/phone/etc或客户模型的任何其他列,它也会返回一个简单的“NA”字符串


我正在努力寻找一个雄辩的解决方案,提供1个改变点

我建议您看看大多数人不知道的Laravel类。就是

它允许您执行以下操作:

$fluent = new Fluent([
    'one' => 1, 
    'two => 2,
]);

echo $fluent->get('one'); // returns 1
echo $fluent->get('three'); // returns null 
echo $fluent->get('three', 3); // returns 3
正如您所想象的,它非常适合与第三方API和数据一起使用,这些API和数据有时会提供意想不到的结果。你也可以用Fluent做更多的事情

或者,您可以查看Laravel帮助程序,例如
array\u get()
。从:

array\u get
函数使用“点”表示法从深度嵌套的数组中检索值:

$array = ['products' => ['desk' => ['price' => 100]]];

$price = array_get($array, 'products.desk.price');

// 100
array\u get
函数也接受默认值,如果找不到特定的键,将返回该值:

$discount = array_get($array, 'products.desk.discount', 0);

// 0

我建议你去看看大多数人都不知道的Laravel课程。就是

它允许您执行以下操作:

$fluent = new Fluent([
    'one' => 1, 
    'two => 2,
]);

echo $fluent->get('one'); // returns 1
echo $fluent->get('three'); // returns null 
echo $fluent->get('three', 3); // returns 3
正如您所想象的,它非常适合与第三方API和数据一起使用,这些API和数据有时会提供意想不到的结果。你也可以用Fluent做更多的事情

或者,您可以查看Laravel帮助程序,例如
array\u get()
。从:

array\u get
函数使用“点”表示法从深度嵌套的数组中检索值:

$array = ['products' => ['desk' => ['price' => 100]]];

$price = array_get($array, 'products.desk.price');

// 100
array\u get
函数也接受默认值,如果找不到特定的键,将返回该值:

$discount = array_get($array, 'products.desk.discount', 0);

// 0

您可以对您的关系使用
with default()
修饰符

例如:

use Illuminate\Database\Eloquent\Model;

class Whatever extends Model {

    public function customer() {
       return $this->belongsTo(Customer::class, 'customer_id', 'id')
                   ->withDefault([
                       'id' => 'NA',
                       'name' => 'Unknown'
                       // etc
                   ]);
    }
}

您可以对您的关系使用
with default()
修饰符

例如:

use Illuminate\Database\Eloquent\Model;

class Whatever extends Model {

    public function customer() {
       return $this->belongsTo(Customer::class, 'customer_id', 'id')
                   ->withDefault([
                       'id' => 'NA',
                       'name' => 'Unknown'
                       // etc
                   ]);
    }
}