#php #laravel #model #append
#php #laravel #Модель #добавить
Вопрос:
Я хочу добавить две переменные добавления в модель laravel. используя одну функцию getVariableNameAttribute() .
Возможно ли это?
МОЙ девиз: я хочу уменьшить загрузку SQL-запросов в 2 раза до в 1 раз
class Like extends Model{
use HasFactory;
protected $fillable = ['like_id', 'like_type', 'liked', 'user_id'];
protected $appends = ['likes','dislikes'];
protected function getLikesAttribute($type)
{
return DB::table("likes")
->select(DB::raw("SUM(liked) as likes"))
->where('like_type',self::class)->where('like_id',$this->id)->first()->likes;
}
public function getDislikesAttribute()
{
return DB::table("likes")
->select(DB::raw("SUM(!liked) as dislikes"))
->where('like_type',self::class)->where('like_id',$this->id)->first()->dislikes;
}}
Комментарии:
1. Я имею в виду… вы можете заставить
getVariableNameAttribute()
возвращать комбинацию двух атрибутов или массив, содержащий два атрибута, или объект, содержащий два атрибута. Количество SQL-запросов зависит от вашей реализации. Нет ничего странного в том, что средства доступа даже не прикасаются к базе данных2. это возможно, пожалуйста, сначала покажите свой текущий код
3. Я добавил свой код в описание моего вопроса. Пожалуйста, проверьте. @IGP Я хочу создать метод getVariableNameAttribute() для двух переменных. возможно ли это?
Ответ №1:
Возможно объединение обоих методов для возврата объекта.
protected function getVariableNameAttribute()
{
return DB::table("likes")
->selectRaw("SUM(liked) as likes")
->selectRaw("SUM(!liked) as dislikes")
->where('like_type', self::class)
->where('like_id', $this->id)
->first();
}
$...->variable_name->likes
$...->variable_name->dislikes
Комментарии:
1. да, это может быть работа, спасибо за ваш ответ. но мне нужно сделать отдельные две переменные.