未定义的变量:group_member.blade.php中的用户

时间:2019-11-30 15:42:56

标签: php laravel

我正在尝试从数据库表(用户)中搜索电子邮件,我想在电子邮件匹配项的视图 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的新手,

2 个答案:

答案 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>