You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel:如何从一方建立一对多关联及从City端获取Users数据

在Laravel中从City端建立一对多关联获取Users数据

根据你的数据表结构,users表通过city_id字段关联到cities表的id字段,因此City模型作为关联的「一方」,可以通过以下步骤建立关联并获取用户数据:

1. 在City模型中定义关联方法

在App\Models\City模型里添加users关联方法,使用hasMany关联类型:

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\HasMany;

class City extends Model
{
    /**
     * 获取该城市下的所有用户
     */
    public function users(): HasMany
    {
        // 符合Laravel默认约定时,只需传入关联模型类即可
        // 默认规则:外键为关联模型的「当前模型名_id」(即users.city_id),主键为当前模型的id(cities.id)
        return $this->hasMany(User::class);
    }
}

2. 获取关联的用户数据

定义好关联后,就可以通过City模型直接获取对应的用户集合:

// 示例1:获取单个城市及其所有用户(预加载关联避免N+1查询)
$city = City::with('users')->find(1);
// 遍历用户
foreach ($city->users as $user) {
    // 操作用户数据,比如输出用户名
    echo $user->name;
}

// 示例2:获取所有城市及其用户
$cities = City::with('users')->get();
foreach ($cities as $city) {
    echo "城市:{$city->name} 的用户:";
    foreach ($city->users as $user) {
        echo $user->name . ' ';
    }
}

特殊情况说明

如果你的表结构不符合Laravel默认约定(比如外键不是city_id,或者表名不是复数),可以在hasMany方法中指定额外参数:

// 假设users表的外键是custom_city_id,cities表的主键是city_id
return $this->hasMany(User::class, 'custom_city_id', 'city_id');

内容的提问来源于stack exchange,提问作者Newbi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 07:22:24