6

私は CakePHP 3.0 を学習していますが、モデルに関連データを保存する際に問題があります。

ClientPreferences の関連データを使用してクライアントを保存しようとしています

クライアントテーブル

class ClientsTable extends Table
{
    public function initialize(array $config)
    {
        (...)
        $this->belongsTo('ClientPreferences', [
            'foreignKey' => 'client_preferences_id'
        ]);
    }
}

クライアントコントローラー

$aClient = $this->Clients->newEntity();
$aClient = $this->Clients->patchEntity($aClient, $this->request->data);

$aClientPreference = $this->Clients->ClientPreferences->newEntity();
$aClientPreference->my_field = 'my value';

$aClient->ClientPreferences = $aClientPreference;

$this->Clients->save($aClient, ['associated' => ['ClientPreferences']];

Client エンティティは正しく保存されますが、関連する ClientPreferences エンティティは保存されず、Cake によってスローされるエラーはありません。

私はこれに従おうとしました:

しかし、それを適切に行うための問題は見つかりませんでした。アドバイスはありますか?

前もって感謝します。

4

2 に答える 2

8

コンベンション、コンベンション、コンベンション

リンクした例には明らかに違いがあります。プロパティ名を詳しく見てください。さらに下にスクロールすると、関連付けに関する具体的な説明が見つかりますbelogsTo

belongsTo アソシエーションを保存するとき、ORM は、アソシエーション名の単一のアンダースコア バージョンで単一のネストされたエンティティを期待します。例えば: [...]

クックブック > データの保存 > BelongsTo 関連付けの保存

したがって、belongsTo関連付けの場合、プロパティ名はデフォルトで小文字でアンダースコアが付けられていると想定されます。つまり、$aClient->client_preference.

あなたの外部キーはところでする必要があります。慣例に合わせるためにも単数形にしてください。つまりclient_preference_id、問題を引き起こしているのはプロパティ名だけですが。

Cookbook > Associations > BelongsTo Associationsも参照してください(特にforeignKeyおよびpropertyNameオプション) 。

于 2015-04-16T08:05:07.890 に答える
0

保存する追加の JoinData がある場合は、これを確認してください: Cakephp 3 - 関連する belongsToMany を保存する (joinTable)

これについてはマニュアルに説明がありません!

于 2020-02-02T20:06:02.767 に答える