CakePHP 3.x保存新记录,但也保存新的关联记录



所以我正在开发一个系统,用户可以在其中创建一个新帐户并上传个人资料照片。我使用两种型号:User用于帐户,Photo用于照片。

users表在引用photos.id的字段photoId上具有外键。photos表具有userId字段,该字段具有引用users.id的外键。因此,用户和照片之间存在递归关系。原因:当创建Photo时,我们希望能够看到哪个User上传了Photo。CCD_ 12具有一个CCD_。

所以它是Photo hasOne UserUser hasOne Photo。它们在表类中也以这种方式进行配置。

现在,当保存了一个新的User时,我们还想保存一个新PhotoPhoto需要新创建的User的id才能保存,但User需要新创建Photo的id。

我的问题是:保存这个的最佳方法是什么?我们是否应该允许User.photoId为空,这样我们就可以先保存用户,然后保存照片,然后用正确的Photo.id更新用户,或者CakePHP3可以为您做一些神奇的来回链接吗?

来自表单的数据:

[
'username' => 'John Doe',
'mail' => 'john@example.org',
'password' => 'whatever',
'photo' => [
'name' => 'myImage.jpg',
'type' => 'image/jpeg',
'tmp_name' => '/private/var/tmp/phpN3dVmL',
'error' => (int) 0,
'size' => (int) 40171
]
]

让事情变得简单

为什么两个表都需要hasOne关系

看起来你们把简单的事情做得如此完美。让我们谈谈:

You have two tables users and photos that's fine.
At the moment each user has one photo that's fine as well.

想象一下,一天用户可能有多张照片,那么?

Then still no worries, everything would be good because you have photos table already.

那么你在这里到底需要什么样的关系呢?

Just like mentioned above, user has one photo, That's why relation should be:
user hasOne photo and obviously photo belongsTo user.

你只需要这些。

例如

用户表上的字段

id
name
email
address
has_photo // eg:if has_photo = 1 user has uploaded photo,such field is not compulsary
password...etc

照片表上的字段

id
user_id // foreign key of users table
name
size

关系

// UsersTable.php
$this->hasOne('Photos', [
'foreignKey' => 'user_id'
]);
// PhotosTable.php
$this->belongsTo('Users', [
'foreignKey' => 'user_id',
'joinType' => 'INNER'
]);

不要混淆照片需要user_id。。users表从不需要photo_id。因为users表已经和photos表关联。如果A有一个B,那么B显然属于A。这就是简单的逻辑。

毫不犹豫地查看文档(协会)以获取有关关系的更多信息。。这对于数据库管理来说非常重要。

或者CakePHP3能为你做一些神奇的来回链接吗?

是的!只要你的关联设置正确,Cake就会处理剩下的。所以最好的方法是将你的数据数组传递到newEntitypatchEntity中,并确保所有传递的字段都可以在你的实体中访问。

保存hasOne关系

实体和批量分配

相关内容

  • 没有找到相关文章

最新更新