sql >> データベース >  >> RDS >> Mysql

CakePHP3-関連付けに依存している場合に関連付けを使用してデータを保存する

    ユーザーが管理者であるかどうかを定義するブールフィールドをユーザーテーブルに含める方が理にかなっているようです。

    そうは言っても、モデルに関係がまだない場合は、モデルで関係を定義する必要があるかもしれません。技術的には、テーブル名と列(user_id)に基づいて、Cakeがこれを焼き付けますが、複数のモデル名(Users、Admins)を使用するのが一般的かどうかは覚えていないため、これは発生しなかった可能性があります。

    ユーザー:

    public $belongsTo = [
        'Admins' => [
            'classname' => 'Admins', //are your models really plural? 
            'foreignKey' => 'user_id',
    ];
    

    管理者

    public $hasOne= [
        'Users' => [
            'classname' => 'Users',
            'foreignKey' => 'user_id',
    ];
    

    次に、管理者に関する情報を指定する必要があると思います。そうしないと、関連付けを保存するためのデータがありません。ビュー内:

    echo $this->Form->input('admins.field1');
    echo $this->Form->input('admins.field2');
    echo $this->Form->input('admins.field3');
    

    何も入力したくない場合は、これらのフィールドを非表示にできることに注意してください。

    保存するには、リクエストデータから新しいユーザーを作成します(フォームでユーザーを作成しますが、フォームで管理者を作成してから、user.nameやuser.surnameなどの入力を追加することもできます)。コントローラー:

    $user = $this->Admins->Users->newEntity();
    
    if($this->request->is('post')) {
        $this->Admins->Users->patchEntity($user, $this->request->data, [
            'associated' => ['Admins']
        ]);
        $this->Admins->Users->save($user);
    }
    


    1. 小数点以下2桁の数値を書くSQLServer

    2. パフォーマンス:サブクエリまたは結合

    3. 以前の接続による更新クエリのSQL構文

    4. SQLが文字列に対して長すぎます