Eloquent :: 一对一在两个表中都处于活动状态,但特定角色
Eloquent :: One to One where active in both tables, but specific roles
我正在尝试仅 return 具有角色(role_id 5 和 6)且在两个 table 中都处于活动状态的用户的特定配置文件。如果我也可以通过 first_name ASC 订购(用户 table)也很好。
user
+---------+---------+-------------+-----------+
| user_id | role_id | first_name | is_active |
+---------+---------+-------------+-----------+
| 1 | 5 | Dan | 1 |
| 2 | 6 | Bob | 0 |
+---------+---------+-------------+-----------+
profile
+------------+---------+------+-------------+-----------+
| profile_id | user_id | bio | avatar | is_active |
+------------+---------+------+-------------+-----------+
| 1 | 1 | text | example.jpg | 1 |
| 2 | 2 | text | noimage.gif | 1 |
+------------+---------+------+-------------+-----------+
我的用户模型
namespace App\Model;
use Illuminate\Database\Eloquent\Model;
class User extends Model{
protected $table = 'user';
protected $primaryKey = 'user_id';
protected $fillable = [
'role_id',
'first_name',
'is_active'
];
public function scopeActive(){
return $this->where('is_active', '=', 1);
}
public function role(){
return $this->belongsTo('App\Model\Role');
}
public function profile(){
return $this->hasOne('App\Model\Profile');
}
}
我的个人资料模型
namespace App\Model;
use Illuminate\Database\Eloquent\Model;
class Profile extends Model{
protected $table = 'profile';
protected $primaryKey = 'profile_id';
protected $fillable = [
'user_id',
'avatar',
'is_active'
];
public function scopeActive(){
return $this->where('is_active', '=', 1);
}
public function user(){
return $this->belongsTo('App\Model\User');
}
}
我的用户控制器
namespace App\Controller\User;
use App\Model\User;
use App\Model\Profile;
use App\Controller\Controller;
final class UserController extends Controller{
public function listExpert($request, $response){
$user = User::active()->whereIn('role_id', array(5, 6))->orderBy('first_name', 'asc')->get();
$profile = $user->profile ?: new Profile;
$data['experts'] = $profile->active()->get();
$this->view->render($response, '/Frontend/experts.twig', $data);
return $response;
}
}
所以我的所有记录都很好。我正在获取所有配置文件,但不是仅属于用户 table 中 role_id 的 5 和 6 的配置文件。此外,如果我在用户 table 中将 is_active 设置为 0,它们仍然会显示。但是,如果我在配置文件 table 中设置 is_active,它们就不会。我需要它们不显示用户或配置文件 table 是否将这些行设置为不活动。因为您可以有一个用户,但他们可能不想要一个活动的配置文件。
好的,我明白了!
$data['experts'] = User::whereIn('role_id', array(5, 6))
->where('is_active', '1')
->whereHas('profile', function($q){
$q->where('is_active', '1');
})
->with('profile')
->orderBy('first_name', 'ASC')
->get();
如果你想知道如何在树枝中return这个....
{% if experts|length > 0 %}
<ul>
{% for item in experts %}
<li>First Name: {{ item.first_name }}, Bio: {{ item.profile.bio }}, Avatar: {{ item.profile.avatar }}</li>
{% endfor %}
</ul>
{% else %}
<p>No records found.</p>
{% endif %}
我正在尝试仅 return 具有角色(role_id 5 和 6)且在两个 table 中都处于活动状态的用户的特定配置文件。如果我也可以通过 first_name ASC 订购(用户 table)也很好。
user
+---------+---------+-------------+-----------+
| user_id | role_id | first_name | is_active |
+---------+---------+-------------+-----------+
| 1 | 5 | Dan | 1 |
| 2 | 6 | Bob | 0 |
+---------+---------+-------------+-----------+
profile
+------------+---------+------+-------------+-----------+
| profile_id | user_id | bio | avatar | is_active |
+------------+---------+------+-------------+-----------+
| 1 | 1 | text | example.jpg | 1 |
| 2 | 2 | text | noimage.gif | 1 |
+------------+---------+------+-------------+-----------+
我的用户模型
namespace App\Model;
use Illuminate\Database\Eloquent\Model;
class User extends Model{
protected $table = 'user';
protected $primaryKey = 'user_id';
protected $fillable = [
'role_id',
'first_name',
'is_active'
];
public function scopeActive(){
return $this->where('is_active', '=', 1);
}
public function role(){
return $this->belongsTo('App\Model\Role');
}
public function profile(){
return $this->hasOne('App\Model\Profile');
}
}
我的个人资料模型
namespace App\Model;
use Illuminate\Database\Eloquent\Model;
class Profile extends Model{
protected $table = 'profile';
protected $primaryKey = 'profile_id';
protected $fillable = [
'user_id',
'avatar',
'is_active'
];
public function scopeActive(){
return $this->where('is_active', '=', 1);
}
public function user(){
return $this->belongsTo('App\Model\User');
}
}
我的用户控制器
namespace App\Controller\User;
use App\Model\User;
use App\Model\Profile;
use App\Controller\Controller;
final class UserController extends Controller{
public function listExpert($request, $response){
$user = User::active()->whereIn('role_id', array(5, 6))->orderBy('first_name', 'asc')->get();
$profile = $user->profile ?: new Profile;
$data['experts'] = $profile->active()->get();
$this->view->render($response, '/Frontend/experts.twig', $data);
return $response;
}
}
所以我的所有记录都很好。我正在获取所有配置文件,但不是仅属于用户 table 中 role_id 的 5 和 6 的配置文件。此外,如果我在用户 table 中将 is_active 设置为 0,它们仍然会显示。但是,如果我在配置文件 table 中设置 is_active,它们就不会。我需要它们不显示用户或配置文件 table 是否将这些行设置为不活动。因为您可以有一个用户,但他们可能不想要一个活动的配置文件。
好的,我明白了!
$data['experts'] = User::whereIn('role_id', array(5, 6))
->where('is_active', '1')
->whereHas('profile', function($q){
$q->where('is_active', '1');
})
->with('profile')
->orderBy('first_name', 'ASC')
->get();
如果你想知道如何在树枝中return这个....
{% if experts|length > 0 %}
<ul>
{% for item in experts %}
<li>First Name: {{ item.first_name }}, Bio: {{ item.profile.bio }}, Avatar: {{ item.profile.avatar }}</li>
{% endfor %}
</ul>
{% else %}
<p>No records found.</p>
{% endif %}