Php 拉威尔:从另一张桌子上拿一个模型

Php 拉威尔:从另一张桌子上拿一个模型,php,mysql,laravel,eloquent,Php,Mysql,Laravel,Eloquent,我得到了一个叫做用户的模型。在这个模型中,我有一个名为UserActivity的函数,其中我返回: return $this->hasMany('App\UserActivity', 'userid'); 在此之后,我有一个从活动表中获取活动名称的函数,但我不知道如何执行此操作,我目前得到了以下结果: public function Activity() { return $this->hasManyThrough('App\UserActivity', 'App\Ac

我得到了一个叫做用户的模型。在这个模型中,我有一个名为UserActivity的函数,其中我返回:

return $this->hasMany('App\UserActivity', 'userid');
在此之后,我有一个从活动表中获取活动名称的函数,但我不知道如何执行此操作,我目前得到了以下结果:

public function Activity() {
      return $this->hasManyThrough('App\UserActivity', 'App\Activity', 'userid', 'activityid');
}
在我看来,我想这样使用:

$activiteiten = \App\User::find(Auth::user()->id);
dd($activiteiten->UserActivity()->Activity());
foreach($activiteiten->UserActivity as $user_activity) {
  foreach($user_activity->Activity as $activity) {
    print_r($activity);
  }
}
但后来我犯了一个错误:

Call to undefined method Illuminate\Database\Query\Builder::Activity() (View: /var/www/vhosts/cpned.nl/intranet.cpned.nl/laravel/resources/views/dashboard.blade.php)
我可以使用内部连接,但我真的想知道是否可以使用Laravel模型。我不知道目前的情况,因为我不知道laravel中函数的名称,我也找不到它,所以如果这是重复的,我很抱歉。 我的表具有以下键和外键:

用户:pk:id

用户活动:主键:userid,activityid

活动:主键:id

提前谢谢你

您可以尝试使用

比如:

$activiteiten = \App\User::with('UserActivity.Activity')->find(Auth::user()->id);
dd($activiteiten->UserActivity->Activity);
编辑:然后您可以执行以下操作:

$activiteiten = \App\User::find(Auth::user()->id);
dd($activiteiten->UserActivity()->Activity());
foreach($activiteiten->UserActivity as $user_activity) {
  foreach($user_activity->Activity as $activity) {
    print_r($activity);
  }
}
显示如何循环处理关系。

您可以尝试使用

比如:

$activiteiten = \App\User::with('UserActivity.Activity')->find(Auth::user()->id);
dd($activiteiten->UserActivity->Activity);
编辑:然后您可以执行以下操作:

$activiteiten = \App\User::find(Auth::user()->id);
dd($activiteiten->UserActivity()->Activity());
foreach($activiteiten->UserActivity as $user_activity) {
  foreach($user_activity->Activity as $activity) {
    print_r($activity);
  }
}

显示如何循环处理这些关系。

用户模型中应包含
活动
函数。那么你可以这样称呼它:

$activiteiten = \App\User::find(Auth::user()->id);
dd($activiteiten->Activity); //gives you a collection of activities
但是,由于用户和活动之间的关系是多对多的,因此您需要的是belongstomy函数,而不是hasManyThrough

这意味着你减少了通过中间模型的次数。您可以查看文档以了解如何做得更好

旁注:为什么函数名以大写字母开头

此外,使用hasmall关系也会影响函数名,因此“活动”变成“活动”(只是为了保持功能和解释同步)

更新:

//User model

public function activities() {
  return $this->belongsToMany('App\Activity', 'user_activity', 'userid', 'activityid');
}

这将使用“用户活动”表来查找用户和活动之间的关系,以便您现在可以通过
user::first()->activities
进行访问。

例如,
activity
函数应该在用户模型中。那么你可以这样称呼它:

$activiteiten = \App\User::find(Auth::user()->id);
dd($activiteiten->Activity); //gives you a collection of activities
但是,由于用户和活动之间的关系是多对多的,因此您需要的是belongstomy函数,而不是hasManyThrough

这意味着你减少了通过中间模型的次数。您可以查看文档以了解如何做得更好

旁注:为什么函数名以大写字母开头

此外,使用hasmall关系也会影响函数名,因此“活动”变成“活动”(只是为了保持功能和解释同步)

更新:

//User model

public function activities() {
  return $this->belongsToMany('App\Activity', 'user_activity', 'userid', 'activityid');
}

这将使用“user_activity”表来查找用户和活动之间的关系,以便您现在可以通过
user::first()进行访问->活动
例如。

确保您没有获得任何
NULL
useractivity确保您没有获得任何
NULL
useractivity虽然用户和活动之间没有直接关系,但有一个数据透视表具有userid和activityid,因此您上面所述的方式不起作用,不是吗?至于命名,谢谢!是的,如果我是正确的,透视表是用户和活动之间的连接,使用Laravel文档中的关系示例就足够了。检查我的更新答案@ThimoFrankenThere虽然用户和活动之间没有直接关系,但有一个pivot表具有userid和activityid,所以您上面所述的方式不起作用,是吗?至于命名,谢谢!是的,如果我是正确的,透视表是用户和活动之间的连接,使用Laravel文档中的关系示例就足够了。检查我的更新答案@ThimoFrankenOk,现在你已经解释了,我已经更新了我的答案。因此,您将浏览模型
User->UserActivity->Activity
。您的问题与解释之间似乎存在一些不一致之处,但希望更新后的答案会有所帮助。它总是返回相同的结果:“此集合实例上不存在属性[UserActivity](视图:/var/www/vhosts/cpned.nl/intranet.cpned.nl/laravel/resources/views/dashboard.blade.ph)▶" 它指向dd($Activiten->UserActivity->Activity);行您是否从查询中删除了
->get()
?它现在终于比以前做得多了一点,但仍然不起作用,我得到以下错误:此集合实例上不存在属性[Activity]。(视图:/var/www/vhosts/cpned.nl/intranet.cpned.nl/laravel/resources/views/dashboard.blade.php)我应该将公共函数activity放在哪个文件中?在User.php、activity.php或pivot表useractivity.php中,与我的答案相关,它应该放在useractivity.phpOk中,现在您已经解释过了,我已经更新了我的答案。因此,您检查了模型
User->useractivity->activity
n您的问题与解释相对应,但希望更新后的答案会有所帮助。它总是返回相同的结果:“此集合实例上不存在属性[UserActivity]。(视图:/var/www/vhosts/cpned.nl/intranet.cpned.nl/laravel/resources/views/dashboard.blade.ph▶它指向dd($Activiten->UserActivity->Activity);Line您是否从查询中删除了
->get()
?它现在终于比以前做得更多了,但仍然不起作用,我得到了以下错误:此集合实例上不存在属性[Activity]。(视图:/var/www/vhosts/cpned.nl/intranet.cpned.nl/laravel/resources/views/dashboard.blade.php)我应该将公共函数活动放在哪个文件中?在User.php、activity.php或pivot表useractivity.php中,与我的答案相关,它应该放在useractivity.php中