【问题标题】:How to display owner of a post in laravel admin list display?如何在 laravel 管理列表显示中显示帖子的所有者?
【发布时间】:2019-12-29 07:25:05
【问题描述】:
public function index()
{
    $query = Activity::orderBy('id','DESC')->with('provinces');
    if(!Auth::user()->hasRole('Administer')){
        $query=$query->where('province_id', Auth::user()->id);
    }
    $activities = $query->latest()->get();

    return view('activity.index',compact('activities'));
}

如何在 laravel 管理列表显示中显示帖子的所有者?

我的用户模型

class User extends Authenticatable implements HasMedia
{
    public function activities()
    {
        return $this->hasMany(Activity::class);
    }
}

我的活动模型:

class Activity extends Model
{
    protected $guarded = [];

    public function user()
    {
        return $this->belongsTo(User::class);
    }

    public function provinces()
    {
        return $this->belongsToMany(Province::class);
    }
}

我的省模型

class Province extends Model
{

    protected $fillable = [ 'title',  'post_id'];

    public function activities()
    {
        return $this->belongsToMany(Activity::class);
    }
    public function user()
    {
        return $this->belongsToMany(User::class);
    }
}

我想按省份向用户展示内容。 管理员也可以看到所有内容。 请帮助我,我是 laravel 的新手

【问题讨论】:

  • 请添加您的模型。
  • Ali Farhoudi 我添加了我的模型

标签: laravel


【解决方案1】:

根据您的评论,您应该将您的省份条件更改为:

if (!Auth::user()->hasRole('Administer')) {
    $query = $query->where('province_id', Auth::user()->province_id);
}

您已定义每个活动都属于一个用户。所以可以像这样访问每个活动的所有者:

$activity->user->name;

如果你的活动属于一个省,你应该这样定义你的关系:

class Activity extends Model
{
    protected $guarded = [];

    public function user()
    {
        return $this->belongsTo(User::class);
    }

    public function province()
    {
        return $this->belongsTo(Province::class);
    }
}

也适用于您的Province 模型:

class Province extends Model
{

    protected $fillable = [ 'title',  'post_id'];

    public function activities()
    {
        return $this->hasMany(Activity::class);
    }
    public function users()
    {
        return $this->hasMany(User::class);
    }
}

这是使用即时加载获取相关记录的最佳做法。它看起来像这样:

$query = Activity::with(['user', 'province'])->orderBy('id','DESC');

还有另一个提示:尝试使用更好的变量名。您可以使用$activities 代替$query

【讨论】:

  • 您能描述一下您的模型之间的关系吗?因为我认为你的定义有问题。
  • 先生。 Farhudi 用户在我的系统中按省份注册,我的活动也按省份注册。示例:如果用户来自德黑兰,他只能查看德黑兰相关活动,而看不到其他省份的活动。谢谢你帮助我
  • 是的,我可以描述我的模型之间的关系,我在描述关系方面没有问题。我只想按省显示活动。用户只能看到与其所在省份相关的活动。管理员可以看到所有活动。
  • 刚刚根据您的评论更改了我的答案
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-02-12
  • 2021-02-25
  • 2021-04-11
  • 2020-11-18
  • 2023-03-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多