我正在尝试从数据库表(用户)中搜索电子邮件,我想在电子邮件匹配项的视图 group_member 中显示电子邮件和姓名。在searchmember中进行数据库操作后,我使用
验证了我的代码 dd($users->email);
dd($users->name);
它可以很好地打印电子邮件和姓名,但通过我传递数据以查看它在我的视图中显示未定义变量用户
这是我的控制器文件: StudentController.php
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use DB;
// use App\Student;
class StudentController extends Controller
{
public function groupmember()
{
return view('group_member');
}
public function searchmember(Request $request)
{
$search=$request->get('searchmember');
$this->validate($request,[
'email'=>'required'
]);
$users = DB::table('users')->where('email', '=', $request->email)->first();
if($users != NULL)
{
return view("group_member",compact("users"));
}
else
{
return redirect('/groupmember')->with('Info', 'No such email found');
}
}
}
这是我的视图: group_member.blade.php 位于视图文件夹内
<div class="actual-group-member">
<div>
<table class="table table-hover">
<thead>
<tr>
<th scope="col">Name</th>
<th scope="col">Email</th>
</tr>
</thead>
<tbody>
@foreach($users as $user1)
<tr>
<td> {{$user1->name}}</td>
<td> {{$user1->email}}</td>
</tr>
@endforeach
</tbody>
</table>
</div>
</div>
这是我的Route Web.php
Route::get('/', function () {
return view('welcome');
});
Auth::routes();
Route::get('/home', 'HomeController@index')->name('home');
Route::get('auth/{provider}', 'Auth\LoginController@redirectToProvider');
Route::get('auth/{provider}/callback', 'Auth\LoginController@handleProviderCallback');
Route::get('/groupmember', 'StudentController@groupmember');
Route::get('/searchmember', 'StudentController@searchmember');
帮我解决这个问题,我是laravel的新手,
答案 0 :(得分:1)
此行:
$users = DB::table('users')->where('email', '=', $request->email)->first();
正确提取了一个单个对象,$users
。不是收藏集。
当您进入刀片视图时,这些行试图遍历用户的集合:
@foreach($users as $user1)
<tr>
<td> {{$user1->name}}</td>
<td> {{$user1->email}}</td>
</tr>
@endforeach
要解决,首先,命名原始对象$user
将很有帮助,因为它在数据库请求中是单数。
因此,在您的控制器中searchmember
内:
$user = DB::table('users')->where('email', $request->email)->first();
// ... return the singlular in compact: return view("group_member",compact("user"));
然后,在刀片式服务器页面上,无需循环,您只有一个与电子邮件匹配的用户,因此跳过@foreach
并使用:
<td> {{$user->name}}</td>
<td> {{$user->email}}</td>
在第一种方法中,您仍然必须为$user
传递变量,否则将失败:
public function groupmember()
{
$user = false;
return view('group_member', compact('user'));
}
然后在刀片服务器页面上考虑这一点;
@if($user)
<td> {{$user->name}}</td>
<td> {{$user->email}}</td>
@endif
答案 1 :(得分:-1)
您在查询构建器中使用->first()
方法,因此它返回用户 Not 集合
在您的控制器中更改这些行。
// you are getting 1 user. So $user not $users
$user = DB::table('users')->where('email', '=', $request->email)->first();
// return $user object to view with key 'user'
return view("group_member",["user"=>$user]);
在您的 group_member视图中
// We are getting 1 user, So no need loop
<tr>
<td> {{$user->name}}</td>
<td> {{$user->email}}</td>
</tr>