Убедитесь, что в ваших моделях установлены правильные отношения, затем определите метод, который возвращает настраиваемый атрибут, а затем добавьте его в массив $appends
Customer
class Customer extends Model
{
protected $appends = ['custom_attribute'];
public function addresses()
{
return $this->hasMany(CustomerAddress::class, 'customer_id');
}
public function getCustomAttribute() {
return 'some calculated data';
}
}
CustomerAddress
class CustomerAddress extends Model
{
protected $appends = ['custom_attribute'];
public function customer()
{
return $this->belongsTo(Customer::class, 'customer_id');
}
public function getCustomAttribute() {
return 'some calculated data';
}
}
Обратите внимание, что имя атрибута - sneak_case, а имя метода в StudlyCase с префиксом get
(что в конечном итоге делает его camelCase). Имя метода и имя доступа должны совпадать.
Теперь в вашем контроллере вы можете получить всех клиентов и их адреса.
$customers = Customer::with("addresses:street,state")->get();
Если вы войдете в $customers
, вы увидите всех клиентов и их адреса. Теперь вы можете использовать пользовательский атрибут для возврата пользовательских значений.
Пример:
public function getCustomAttribute() {
return "{$this->street} {$this->state}";
}