как мы можем добавить два атрибута с помощью одной функции?

#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. да, это может быть работа, спасибо за ваш ответ. но мне нужно сделать отдельные две переменные.