CakePHP如何通过关联模型跨表取数:根据user_id获取对应用户名
CakePHP通过关联模型按user_id获取用户名方案
步骤1:配置Likes表与User表的关联
打开src/Model/Table/LikesTable.php,在initialize方法中添加如下关联规则:
$this->belongsTo('Users', [ 'foreignKey' => 'user_id', 'joinType' => 'LEFT' // 如果需要点赞记录就算没有对应用户也返回就用LEFT,否则用INNER ]);
步骤2:修改控制器分页的关联加载配置
你原来的分页配置只加载了Post关联的Likes和Post关联的Users,需要嵌套加载Likes关联的Users数据,修改PostController中的分页代码:
$this->paginate = [ 'contain' => ['Users', 'Likes' => ['Users']], ]; $posts = $this->paginate($this->posts);
步骤3:视图中直接读取用户名
加载完成后,你可以直接通过层级调用获取对应用户名:$post->likes->user->user_name
调用后将直接输出对应user_id匹配的用户名,你给出的示例中输出结果为sample_name。
注意事项
- 确认
src/Model/Entity/User.php的$_accessible属性中已放开user_name字段的访问权限,配置如下:protected $_accessible = [ // 其他原有字段配置保留 'user_name' => true, ]; - 如果一篇文章对应多条点赞记录,你需要循环遍历
$post->likes集合后再读取对应的用户信息。
内容的提问来源于stack exchange,提问作者Kiruaaa
相关产品推荐
相关产品推荐

