Fetching dynamic attributes cho models in Laravel Chuyên mục PHP và Laravel 2023-07-26 300 Lượt xem 65 Lượt thích 0 Bình luận

Có tồn tại tính năng gọn gàng này trong Laravel mà bạn có thể thêm các thuộc tính trong các model mà không có cột tương ứng trong cơ sở dữ liệu của mình.
Bạn có thể làm được điều này bằng cách trước tiên tạo một accessor cho thuộc tính mà bạn muốn được trả về khi truyền model thành một mảng hoặc JSON. Bạn có thể tạo một accessor như bên dưới.
namespace App;
use Illuminate\Database\Eloquent\Model;
class Post extends Model
{
/**
* The accessors to append to the model's array form.
*
* @var array
*/
protected $appends = ['is_editable'];
/**
* Get the administrator flag for the post.
*
* @return bool
*/
public function getIsEditable()
{
return $this->attributes['admin'] == 'yes';
}
}
Lưu ý ở đây rằng, bạn cần thêm tên thuộc tính vào thuộc tính appends trong model của mình. Cũng lưu ý rằng, tên thuộc tính thường được tham chiếu trong trường hợp snake case, mặc dù accessor được xác định bằng cách sử dụng trường hợp camel case.
Khi thuộc tính đã được thêm vào danh sách appends, nó sẽ được đưa vào cả biểu diễn mảng và JSON của model.
Fetching dynamic attributes trong khi chạy
Bạn có thể sử dụng phương thức chắp thêm trên model instance để nối thêm các thuộc tính một cách nhanh chóng.
return $post->append('is_editable')->toArray();
Hoặc nếu bạn có thể sử dụng phương thức setAppends, nếu bạn muốn nối thêm nhiều thuộc tính như vậy.
return $post->setAppends(['is_editable', 'is_expired'])->toJson();


setAppends
Bình luận (0)