Я не могу передать условие в находке из ассоциации hasmany, возвращает ошибку столбца not found. Если я не пропущу никаких условий в таблице удобств для ресторана, он возвращает данные вместе с несколькими записями для ресторана. Пожалуйста, проверьте следующий код и дайте мне знать, где проблема. Я приложил сущности, модель и код контроллера. Все остальные вещи работают здесь.
Организация: Рестораны
class Restaurant extends Entity
{
protected $_accessible = [
'user_id' => true,
'name' => true,
'image' => true,
'description' => true,
'created' => true,
'modified' => true,
'user' => true,
'restaurant_amenities'=>true
];
}
Ресторан EntityАудитория
class RestaurantAmenities extends Entity
{
protected $_accessible = [
'restaurant_id' => true,
'amenity_id' => true,
'created' => true,
'modified' => true,
'restaurants' => true
];
}
Столик: Ресторанный столик
public function initialize(array $config)
{
parent::initialize($config);
$this->setTable('restaurants');
$this->setDisplayField('name');
$this->setPrimaryKey('id');
$this->addBehavior('Timestamp');
$this->belongsTo('Users', [
'foreignKey' => 'user_id',
'joinType' => 'INNER'
]);
$this->hasMany('RestaurantAmenities', [
'className' => 'restaurant_amenities',
'foreignKey' => 'restaurant_id'
])->setJoinType('INNER')->setDependent(true);
}
Таблица удобств ресторана
public function initialize(array $config)
{
parent::initialize($config);
$this->setTable('restaurant_amenities');
$this->setDisplayField('id');
$this->setPrimaryKey('id');
$this->addBehavior('Timestamp');
$this->belongsTo('Amenities', [
'foreignKey' => 'amenity_id',
'joinType' => 'INNER'
]);
$this->belongsTo('Restaurants', [
'foreignKey' => 'restaurant_id',
'joinType' => 'INNER'
]);
}
Найти запрос на RestaurantsController
$distanceField = '(3959 * acos (cos ( radians(:latitude) )
* cos( radians( Restaurants.latitude ) )
* cos( radians( Restaurants.longitude )
- radians(:longitude) )
+ sin ( radians(:latitude) )
* sin( radians( Restaurants.latitude ) )))'; //* 1.60934
$amenities = [2,3];
$restaurants = $this->Restaurants->find()
->select(['Restaurants.id','Restaurants.name','Restaurants.image','Restaurants.avg_rating','Restaurants.starting_price','Cuisines.name','RestaurantAmenities.amenity_id',
'distance' => $distanceField
]) ->having(["distance < " => $distance])
->bind(':latitude', $latitiude, 'float')
->bind(':longitude', $longitude, 'float')
->contain(['RestaurantAmenities'=>function($query) use($amenities){
return $query->select(['amenity_id'])
->where(['RestaurantAmenities.amenity_id IN' => $amenities]);
},'Users'=>function($q){
return $q->where(['Users.status'=>true]);
}])
->where($conditions)->toArray();
Возвращает столбец не найден Ошибка, так как столбец существует в таблице:
{ "message": "SQLSTATE[42S22]: Column not found: 1054 Unknown column \u0027RestaurantAmenities.amenity_id\u0027 in \u0027field list\u0027", "url": "\/api\/restaurants\/filter.json", "code": 500, "file": "\/home\/simerjit\/public_html\/supperout\/vendor\/cakephp\/cakephp\/src\/Database\/Statement\/MysqlStatement.php", "line": 39 }