Laravel/Eloquent - 根据当前用户查询报告卡



我目前的项目是学校管理系统。现在,我需要执行以下操作:

  • 查询数据库以获取与当前用户关联的所有报告卡;
  • 在视图中显示它们;

主要的主要问题是第一部分,因为我是雄辩的初学者。我相信我可以使用刀片来构造表来显示报告卡中的信息 - 前提是我可以在使用控制器传递该信息。

我已经根据Eloquent的文档使用hasMany和belogsTo建立了userscards之间的关联。在我的卡控制器中,我有以下内容:

class CardController extends Controller
{
public function index()
{
$card = AppUser::find(1)->cards;
// After querying, return the view, etc
}
}

该功能缺少功能,但我不知道具体是什么。我尝试过其他一些事情,例如:

$cards = DB::table('cards')->get();
return view('viewname');

我知道,我在这里缺少一些基本的东西,但我不能把手指放在上面。老实说,即使在阅读了大部分文档之后,我仍然不习惯在Laravel中查询数据库。

任何帮助将不胜感激。

既然你说你已经建立了两个模型之间的关系,那么一半的工作已经完成, 首先,我可以看到您没有检索当前经过身份验证的用户,我相信您希望在视图中检索其报告卡,为此,您只需将其放入索引方法中即可:

$user = auth()->user();

但现在我鼓励你去修补,php artisan tinker终端并尝试这个:

$user = AppUser::first(); // or change this to AppUser::find($someId);
$cards = $user->cards;

并检查输出,问题是,这$user->cards单词应该与您在用户模型上定义的方法名称相同,因此在您的User.php中应该是这样的

public function cards() {
return $this->hasMany(Card::class);
}

所以现在你应该有这个用户的可用卡片的集合, 您的index方法应如下所示:

public function index() {
$user = auth()->user();
$cards = $user->cards;
// Or you can inline it and make it all in one line like this,
// $cards = auth()->user()->cards;
return view('someView', compact('cards'));
}

在你的someView.blade.php中,只需循环它们,如下所示:

@foreach ($cards as $card)
{{ $card->someProperty }}
@endforeach

希望这有所帮助,如果您需要其他东西,请告诉我。

最新更新