Возьмите два.
в Device.php:
// creates a users property within a Device, a container of associated Users
public function relations()
{
return array(
'users'=>array(self::MANY_MANY, 'User', // don't use HAS_MANY
'user_devices(user_id, device_id)'), // composite key assumed
);
}
затем найдите, если запрошенное устройство принадлежит запрашивающему пользователю:
$device = Device::model()->findByPk($deviceId);
if ( $device->users->findByPk($userId) == Null )
$device = Null;
ЭтоПохоже, это сработало бы, но неэффективно извлекало бы много ненужных записей пользователя, так как вы уже знаете, кто пользователь, и, вероятно, уже имеют его activeRecord.Чтобы избежать этой неэффективности, книга Yii Agile Development использует сырой SQL для запросов отношений M2M в родительской модели (Device.php):
// "Agile" uses a $user AR argument, you can use $userId instead
public function doesUserOwnDevice($userId)
{
$sql = "SELECT user_id FROM user_devices WHERE
device_id=:deviceId AND user_id=:userId";
$command = Yii::app()->db->createCommand($sql);
$command->bindValue(":deviceId", $this->id, PDO::PARAM_INT);
$command->bindValue(":userId", $userId, PDO::PARAM_INT);
return $command->execute()==1 ? true : false;
}
Я использовал Device
вместо Devices
для именимодель (аналогично device
для названия таблицы).Рефакторинг, если вырезать и вставить.Аналогично для User
.Аналогично, для пропущенного префикса "tbl_".