Laravel - мягкое удаление не действует - PullRequest
3 голосов
/ 18 апреля 2019

У меня проблема с мягким удалением. У меня есть функция в моем приложении, где пользователь может пометить следующее объявление о недвижимости. Они также могут снять объявление о недвижимости.

Это отлично работает. когда они снимают звезду, запись мягко удаляется. Отметка времени delete_at обновлена.

Однако, если пользователь попытается снова пометить его, я получу сообщение о том, что свойство уже было добавлено / помечено. Таким образом, мягкое удаление игнорируется? Есть идеи?

StarredPropertyModel

namespace App;

use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\SoftDeletes;


class StarredProperty extends Model
{
    use SoftDeletes;

    protected $fillable = ['property_id', 'user_id'];

    public function scopeStarredProperty($query, $propertyId, $userId)
    {
        return $query->where('property_id', $propertyId)->where('user_id', $userId)->first();
    }
}

StarredPropertyController

class StarredPropertyController extends Controller
{
    public function star(Property $property, User $user, Request $request)
    {     
        if(!$user->starredProperties()->starredProperty($property->id, $user->id))
        {
            return response()->json(StarredProperty::create(['property_id' => $property->id, 'user_id' => $user->id]));
        }

        return response()->json('You have already like this property');
    }

    public function unstar(Property $property, User $user, Request $request)
    {
        $starredProperty = $user->starredProperties()->starredProperty($property->id, $user->id);

        if($starredProperty->exists())
        {
            $starredProperty->delete();
        }
    }
}

1 Ответ

4 голосов
/ 18 апреля 2019

Вам не хватает ->get() в конце, если это проверяет, существует ли starredProperty в функции star. $user->starredProperties()->starredProperty($property->id, $user->id) возвращает запрос, а не запись. Чтобы получить запись, вам все равно нужно выполнить get, если нет записей, то значение, возвращаемое из get, будет null.

...