我正在尝试连接MySQL查询上的透视表。基本上我选择的是用户,其中一个用户有多个子类别。
因此,在我的“sub_categories”关系的本质上,一个用户有许多子类别。但由于我使用的是原始选择,我无法选择/使用这些关系。相反,我必须使用联接。
这是我的子类别表
Column Type Comment id int(10) unsigned Auto Increment main_category_id int(10) unsigned [0] category_name varchar(100) created_at timestamp NULL updated_at timestamp NULL
这是我的透视表
Column Type Comment user_id int(10) unsigned sub_category_id int(10) unsigned
这是我的SQL查询
$users= DB::table('users') ->select('users.*', 'user_options.*', DB::raw(' branches.*, professional_profiles.tags, ' . $lat . ' AS latpoint, ' . $lng . ' AS longpoint, ' . $radius . ' AS radius, ' . $measurement_number . ' AS distance_unit, ( ' . $measurement_number . ' * DEGREES( ACOS( COS(RADIANS(' . $lat . ')) * COS(RADIANS(branches.lat)) * COS(RADIANS(' . $lng . ' - branches.lng)) + SIN(RADIANS(' . $lat . ')) * SIN(RADIANS(branches.lat)) ) ) ) AS distance '), 'users.id AS id') ->leftJoin('branches', 'users.branch_id', '=', 'branches.id') ->leftJoin('user_options', 'user_options.user_id', '=', 'users.id') ->leftJoin('professional_profiles', 'professional_profiles.user_id', '=', 'users.id') ->where('user_options.professional', '>', 0) ->where('users.branch_id', '>', 0) ->where(function ($x) use ($term) { $x->where('branches.branch_name', 'like', '%' . $term . '%') ->orWhere('branches.branch_city', 'like', '%' . $term . '%') ->orWhere('users.firstname', 'like', '%' . $term . '%') ->orWhere('users.lastname', 'like', '%' . $term . '%') ->orWhere('professional_profiles.tags', 'like', '%' . $term . '%'); }) ->having('distance', 'orderBy('distance', 'asc') ->limit(50) ->get();
这是我的结果:
[ { id: 4, profile_id: 2, branch_id: 3, prefix: "dr", firstname: "SWK1", lastname: "Doe", email: "swk1@gmail.com", mobile_no: "811692244", password: "$2y$10$LzkPwc2TZu/.UzB.0mYJ", avatar: "123.jpg", remember_token: "wF33ShLirtvS3mIYJpmg5skVVoohGJCS7v", created_at: "2017-10-12 09:32:05", updated_at: "2017-10-12 09:32:05", provider: null, provider_id: null, user_id: 4, profile_administrator: 0, branch_administrator: 0, professional: 1, branch_name: "Swakopmund 1", branch_address_1: "14 Backer St", branch_address_2: null, branch_city: "Swakopmund", branch_state: null, branch_zip: "9000", branch_country: "NA", branch_phone: "77777", main_image: null, lat: -22.67, lng: 14.53, description: "Swakopmund 1", tags: "Doctors,Dietician,General Practitioner", latpoint: "-22.5608807", longpoint: "17.0657549", radius: 500, distance_unit: "111.045", distance: 260.210154298872 } ]
因此,本质上的问题是通过使用透视表设置的值,而不依赖于雄辩的关系表,而是通过使用SQL,将sub_categories表连接到users表上。
由于一个用户有许多sub_categories,因此最好将sub_categories作为加入主SQL查询的数组值返回。
我有类似的情况,我查询范围以及一对多关系的透视表。在我的情况下,用户有多个组,我需要获取这些数据以及用户对象,而不需要额外的查询或连接。请参阅查询范围
和一对多和多对多,使用Laravel文档上的pivot。
如果您想使用数据透视表获取数据,下面是示例
User Model:
class User extends Authenticatable
{
use Notifiable;
protected $fillable = [
'name', 'email', 'username', 'password',
];
protected $hidden = [
'password', 'remember_token',
];
public function groups()
{
return $this->belongsToMany('App\Group', 'user_groups',
'user_id', 'group_id');
}
public function scopeDetail($query)
{
return $query->with('groups');
}
}
组模型:
class Group extends Model
{
protected $fillable = [
'dn', 'cn', 'description',
];
}
在上面的用户模型中,请参见return$this-
现在获取数据(在控制器上)使用上述架构:
User::where(.....)->detail()->first();
其中
detail()
是我在用户模型中定义为scopeDetail
的范围。注意:范围
必须附加前缀。这将为用户提供该用户在数组中所属的所有组,因此无论何时使用JSON查看数据,都可以以正确的方式查看结构。
使用上述方法,我的用户对象具有用户所属的所有组。
额外
如果您的用户模型(用户)也与其他模型相关,那么您可以通过将模型类上的作用域定义为
............
//..............
public function profile()
{
return $this->belongsToMany('App\Profile', 'user_id');
}
public function data1()
{
return $this->belongsToMany('App\Data1', 'user_id');
}
public function groups()
{
return $this->belongsToMany('App\Group', 'user_groups',
'user_id', 'group_id');
}
//Defining query scope................
public function scopeDetail($query)
{
return $query->with('groups','profile','data1');
//to fetch user with this scope use User::where(.....)->detail()->get(); notice there is not scope prefix while using the scope
}
........
........
我很难让mySQL返回我想要的结果,因此希望有人能给我一些关于我错在哪里的指示。我有3个表(Sales\u Area、Orders、Rooflight\u Request),Orders包含一个Sales\u Area\u ID列以连接Sales\u Area,因此Sales\u Area可以有多个订单。Rooflight\u请求包含Order\u ID,因此一个订单可以有多个Rooflight\
问题内容: 我和用户与GameMap之间存在一对多的关系。一个用户可以拥有许多地图。 用户类别: 但是,有时我需要急于加载地图。为了避免在关闭Session后出现 LazyInitializationException ,我有两种检索Users的方法。 用户存储库: 问题: 但是, 如果表中没有该用户的映射 ,那么JPQL JOIN FETCH变体希望一次加载该用户,并且他的映射返回NULL用户。
我的数据库中有一个小特例,我需要从两个具有一对一关系的不同表中获取数据,以获得有用的结果。获取看起来像这样: 当然,我在实际代码中使用了-这只是一个示例。我的问题是是否以及如何将jOOQ中获取的数据写入POJO。我不确定是否有办法让jOOQ为我生成这个POJO,但如果我必须自己编写它,我假设我需要像适配器这样的东西以及像作为数据类型的转换器。 我看到有可能出现RecordMapperProvide
问题内容: 我和用户与GameMap之间存在一对多的关系。一个用户可以拥有许多地图。 用户类别: 但是,有时我需要急于加载地图。为了避免在关闭Session后出现 LazyInitializationException ,我有两种检索Users的方法。 用户存储库: 问题: 但是, 如果表中没有该用户的映射 ,那么JPQL JOIN FETCH变体希望一次加载该用户,并且他的映射返回NULL用户。
我有两张桌子。与文章编号相关的图像。还有一张照片上有文章编号 我想要做的是列出第一个表中的所有图像(navn)(它是一个特定的文章编号(art_id))和第二个表中的最多5个图像(其中文章编号(artid)出现在照片(fotostation)上)。 (我现在不知道该怎么做:) 这不起作用 表格: 这些表与fotostation字段相关。要在“ECS_article_images_inneholde