Php 基于外键yii2的模型中的唯一字段验证

Php 基于外键yii2的模型中的唯一字段验证,php,yii2,Php,Yii2,我有一个名为menusoffered的表,其中我根据restaurantid存储menuname,该表是一个外键 在我的menusoffered模型中,我声明menuname具有唯一的验证器,但这是检查整个表的唯一性 我希望它基于restaurantid检查唯一性, 有谁能帮助我如何使这个menuname对于特定的restaurantid 下面是我给定的菜单型号, class Menusoffered extends \yii\db\ActiveRecord { /** * @inherit

我有一个名为
menusoffered
的表,其中我根据
restaurantid
存储
menuname
,该表是一个外键

在我的
menusoffered
模型中,我声明
menuname
具有唯一的验证器,但这是检查整个表的唯一性

我希望它基于
restaurantid
检查唯一性, 有谁能帮助我如何使这个
menuname
对于特定的
restaurantid

下面是我给定的菜单型号,

class Menusoffered extends \yii\db\ActiveRecord
{

/**
 * @inheritdoc
 */
public static function tableName()
{
    return 'menusoffered';
}

/**
 * @inheritdoc
 */
public function rules()
{
    return [
            ['phase_id', 'required', 'message' => 'Please select Phase'],
            ['menuname', 'required'],           
            ['price', 'required'],
            [['price'],'integer' , 'message' =>'Price should be in digits'],
            [['image_url'], 'file'],
            [['description', 'status'], 'string'],
            [['createdts','restaurantid'], 'safe'],
            ['master_menu_sepcality_id', 'required', 'message' => 'Please select Speciality'],
            ['master_menu_type_id', 'required', 'message' => 'Please select Type'],
            ['menuname', 'unique', 'with'=>'restaurantid'],
            [['restaurantid'], 'exist', 'skipOnError' => true, 'targetClass' => Restaurant::className(), 'targetAttribute' => ['restaurantid' => 'id']],
    ];
}

/**
 * @inheritdoc
 */
public function attributeLabels()
{
    return [
        'id' => 'ID',
        'master_menu_sepcality_id' => 'Master Menu Sepcality ID',
        'master_menu_type_id' => 'Master Menu Type ID',
        'item' => 'Item',
        'price' => 'Price',
        'restaurantid' => 'Restaurantid',
        'phase_id' => 'Phase ID',
        'description' => 'Description',
        'image_url' => 'Image Url',
        'status' => 'Status',
        'createdts' => 'Createdts',
    ];
} }
试试这个:


谢谢朋友,这对我来说是唯一有效的,因为在我的活动表单中并没有restaurantid字段,所以我在那个里添加了隐藏字段,非常感谢
// a1 and a2 need to be unique together, only a1 will receive error message
['a1', 'unique', 'targetAttribute' => ['a1', 'a2']]