$ checkLike = $ пользователь-> места-> содержит ($ placeId); продолжает возвращать ложь, хотя по моим расчетам она должна возвращать истину - PullRequest
1 голос
/ 16 мая 2019

Этот $checkLike = $user->places->contains($placeId); предназначен для проверки того, понравился ли пользователю вид с placeId, однако он продолжает возвращать false, даже если в базе данных есть запись.

У меня есть 3 таблицы, подобные этой:

Table: Users
Columns: id, username, password

Table: Places
Columns: id, place_id

Table: Place_User
Columns: id, user_id, place_id

и в настоящее время у меня есть 1 запись в каждой таблице, например:

   Users             Place_User          Places

6, Admin, Admin
                      1, 6, 15
                                    15, b4b8adfb46dfbabdf864b

Так что я предположил, что $checkLike = $user->places->contains($placeId); вернет true, если запись уже есть.К сожалению, это не так.

Мои модели:

class User extends \Eloquent implements Authenticatable
{
    use AuthenticableTrait;

    public function places(){
        return $this->belongsToMany('App\Place');
    }
}

И

class Place extends Model
{
    public function user(){
        return $this->belongsToMany('App\User');
    }
}

1 Ответ

2 голосов
/ 16 мая 2019

Метод ->contains будет работать только в том случае, если для вашего $placeId задано id места, а не place_id из App\Place.

. В качестве примера рассмотрим следующее:

$placeId = 15;
$user->places->contains($placeId); // true

Однако следующее вернет false, поскольку оно ссылается на атрибут place_id:

$placeId = 'b4b8adfb46dfbabdf864b';
$user->places->contains($placeId); // false

Для достижения вышеизложенного необходимо передать вызываемый элемент и сравнитьатрибут:

$placeId = 'b4b8adfb46dfbabdf864b';
$user->places->contains(function ($place) use ($placeId) {
    return $place->place_id == $placeId;
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...