所以我有2个型号,User&配置文件,关系设置如下:
class's use var x = document.getElementByClass("fromAccount");
name's use var x = document.getElementsByName("fromAccount");
id's use var x = document.getElementsById("fromAccount");
我有3个表,用户,个人资料和user_profiles(数据透视表)
我的用户表中有一个名为 /**
* User belongs to many Profile
*
* @return \Illuminate\Database\Eloquent\Relations\belongsToMany
*/
public function profiles()
{
return $this->belongsToMany('App\Models\Profile', 'user_profiles');
}
的列,其中填充了个人资料ID。
如何设置关系以便我可以调用以下内容:
active_profile
这样它将返回active_profile中设置的id的所有配置文件信息?
答案 0 :(得分:1)
我可能错了,但为什么不使用belongsTo
关系?
public function active_profile()
{
return $this->belongsTo('App\Models\Profile', 'active_profile');
}
希望这有帮助!
答案 1 :(得分:1)
您可以在数据透视表中添加额外的字段,例如active = enum(y, n)
,然后设置unique key (user_id, active)
,然后在用户模型中使用wherePivot
方法:
public function profiles()
{
return $this->belongsToMany('App\Models\Profile', 'user_profiles');
}
public function activeProfile()
{
return $this->belongsToMany('App\Models\Profile', 'user_profiles')->wherePivot('active', 'y');
}
但是它需要数据库重构。
答案 2 :(得分:0)
您应该可以使用find
$user->profiles()->find($user->active_profile);
答案 3 :(得分:0)
您可以在User
模型中添加方法,如下所示:
public function active_profile ()
{
return $this->profiles()
->find($this->active_profile);
}
然后您可以将该方法称为$ user-> active_profile();
答案 4 :(得分:0)
在Laravel 5.8上,由于我想在紧急加载中使用它,因此我使用了此软件包: https://github.com/staudenmeir/eloquent-has-many-deep
这是我的情况
可以在很多照片上为用户添加标签,而在照片上可以为很多用户添加标签。我想建立关系以获取标记了用户的最新照片。
我认为我的情况也可以应用于任何多对多关系
我做了数据透视模型 UserPhoto
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Relations\Pivot;
class UserPhoto extends Pivot
{
public function user()
{
return $this->belongsTo(User::class);
}
public function photo()
{
return $this->belongsTo(Photo::class);
}
}
然后使用 staudenmeir 的软件包在我的用户模型上:
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
use Staudenmeir\EloquentHasManyDeep\HasRelationships;
class User extends Model
{
use HasRelationships;
public function photos()
{
return $this->belongsToMany(Photo::class);
}
public function latestPhoto()
{
return $this->hasOneDeep(Photo::class, [UserPhoto::class])
->latest();
}
}
然后我可以轻松地执行以下操作:
User::with('latestPhoto')->get()
和$user->latestPhoto