存储HABTM关联中持有的项目的排序顺序 - CakePHP

Dar*_*ton 3 php mysql sql activerecord cakephp

在一个ActiveRecord(CakePHP的味)设置我有视频和二进制位HasAndBelongsToMany关联安装:仓可以存储ň到影片的引用,和视频可以属于ñ垃圾箱.

我需要能够手动设置和存储特定彬内的视频的显示顺序(所以客户端可以有自己的影片在宾内以特定的顺序.)我最初的想法是建立在滨存储的字段视频ID数组按需要显示的顺序排列.这是处理这个问题最有效的方法吗?

如果是这样,当我再拿到HABTM查询结果,究竟是重新整理干净/最有效的方式返回查询的ID的数组排序匹配吗?

与Bin关联的视频将作为数组返回:

[Video] => Array
            (
                [0] => Array
                    (
                        [id] => 49b2de95-0338-48b9-bc88-01ba35664358
                        ...

                    )

                [1] => Array
                    (
                        [id] => 49b1ccad-b770-410e-be46-03a035664358
                        ...
            )
Run Code Online (Sandbox Code Playgroud)

或者有没有更好的方法来实现我在不使用HABTM关联的情况下尝试做的事情?

提前致谢 -

Ale*_*and 6

当HABTM变得复杂时该怎么办?

默认情况下,在保存HasAndBelongsToMany关系时,Cake将删除连接表上的所有行,然后再保存新的行.例如,如果您有一个有10个孩子关联的俱乐部.然后,您将与2名儿童一起更新俱乐部.俱乐部只有2个孩子,而不是12个孩子.

另请注意,如果要为连接添加更多字段(创建时或元信息),可以使用HABTM连接表,但重要的是要了解您有一个简单的选项.

两个模型之间的HasAndBelongsToMany实际上是通过hasMany和belongsTo关联关联的三个模型的简写.

考虑这个例子:

Child hasAndBelongsToMany Club
Run Code Online (Sandbox Code Playgroud)

另一种看待这种情况的方法是添加会员模型

Child hasMany Membership
Membership belongsTo Child, 
ClubClub hasMany Membership.
Run Code Online (Sandbox Code Playgroud)

这两个例子几乎完全相同.它们在数据库中使用相同数量和命名的字段以及相同数量的模型.重要的区别在于"连接"模型的命名方式不同,而且它的行为更具可预测性.

在您的示例中,您需要一种方法来添加和删除而无需编辑其他用户视频链接,因此标准habtm将不适合您.为此"join"创建一个类似于上述Membership模型的模型.此外,如果您添加了一个权重字段,您可以使用有序行为(我写的)来为每个bin订购每组视频.然后,您将使用以下字段

id, bin_id, video_id, weight
Run Code Online (Sandbox Code Playgroud)

并在行为配置中将bin_id设置为"foreign_key".祝好运