拿兩個。
在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。爲了避免這種情況innefficiency,在Yii的敏捷開發的書籍使用原始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_」前綴。
用戶設備是否將user_id和device_id作爲主(複合)鍵?是的,不要忘記像他們[在這裏](http://learnyii.blogspot.com/2010/12/yii-on-many-many-relationships.html)一樣覆蓋prmaryKey()。您可以使用自定義模型在該表上查找以識別用戶設備關係(或缺少一個)。 – hobs
你的意思是MANY_MANY而不是HAS_MANY。 – hobs
@Hobs,你是對的。 –