如何迭代具有多个记录的雄辩对象?

时间:2016-10-10 07:21:29

标签: laravel laravel-5.3

我正在使用以下代码从表中提取记录:

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use Illuminate\Database\Eloquent\Collection;
use App\Http\Requests;
//use App\tempLogin;

class loginController extends Controller
{
    public function checkCredentials(Request $request){

        $mobile = $request->mobile;

        $users = App\tempLogin::where('mobile','=',$mobile)->get();


        return $user->name;

    }

但这是雄辩的对象所以它给我一个错误。会怎样做呢?

3 个答案:

答案 0 :(得分:1)

你有一个错字

$users = \App\tempLogin::where('mobile','=',$mobile)->get();//you are getting $users

&安培;返回

return $user->name;

所以将其改为

return $users->name;

但我仍然怀疑它会解决您的问题,因为您正在使用 get &除非您在 collection 模型中有关系,否则返回 tempLogin

  

所以我假设您在数据库中有 mobile 等于的记录   某事&如果是这种情况,您想要返回其名称   然后你可以使用这个解决方案

$users = \App\tempLogin::where('mobile','=',$mobile)->firstOrFail();//source https://github.com/laravel/framework/blob/5.3/src/Illuminate/Database/Eloquent/Builder.php#L299-L306

然后返回

return $users->name;
  

如果您在DB&中有多条记录你想做一个 get   你可以这样做吗

$users = \App\tempLogin::select(['name'])->where('mobile','=',$mobile)->get();

这只会从表

中选择 name

现在你可以回来了

return $users;

这将是 tempLogin 模型&的集合。如果您在视图中使用它作为api,它将使用像这样的laravel请求自动进行JSON编码

[{"name":'YOUR_NAME_OF_THE_RECORD'},{"name":'YOUR_NAME_OF_THE_RECORD'}]

或者,如果您想将记录作为数组返回,可以像这样使用

$users = \App\tempLogin::select(['name'])->where('mobile','=',$mobile)->pluck('name')->all();
return $users;

这将返回一个这样的数组

[
 "YOUR_NAME_OF_THE_RECORD",
 "YOUR_NAME_OF_THE_RECORD",
]You have a typo

$users = \App\tempLogin::where('mobile','=',$mobile)->get();//you are getting $users

&安培;返回

return $user->name;

所以将其改为

return $users->name;

但我仍然怀疑它会解决您的问题,因为您正在使用 get &除非您在 collection 模型中有关系,否则返回 tempLogin

  

所以我假设您在数据库中有 mobile 等于的记录   某事&如果是这种情况,您想要返回其名称   然后你可以使用这个解决方案

$users = \App\tempLogin::where('mobile','=',$mobile)->firstOrFail();//source https://github.com/laravel/framework/blob/5.3/src/Illuminate/Database/Eloquent/Builder.php#L299-L306

然后返回

return $users->name;
  

如果您在DB&中有多条记录你想做一个 get   你可以这样做吗

$users = \App\tempLogin::select(['name'])->where('mobile','=',$mobile)->get();

这只会从表

中选择 name

现在你可以回来了

return $users;

这将是 tempLogin 模型&的集合。如果您在视图中使用它作为api,它将使用像这样的laravel请求自动进行JSON编码

[{"name":'YOUR_NAME_OF_THE_RECORD'},{"name":'YOUR_NAME_OF_THE_RECORD'}]

或者,如果您想将记录作为数组返回,可以像这样使用

$users = \App\tempLogin::select(['name'])->where('mobile','=',$mobile)->pluck('name')->all();
return $users;

这将返回一个这样的数组

[
 "YOUR_NAME_OF_THE_RECORD",
 "YOUR_NAME_OF_THE_RECORD",
]

答案 1 :(得分:0)

您正在尝试使用未定义的$user变量。您应该迭代集合以获得单个用户:

foreach ($users as $user) {
    echo $user->name;
}

答案 2 :(得分:0)

通常你循环收集项目如下:

$users = App\tempLogin::where('mobile','=',$mobile)->get();

if($users->count() > 0)
{
   forach($users as $user)
   {
      // do something with the App\User model
      $name = $user->name;
   }
}

但是如果要将users集合作为数组访问,请更改如下所示的查询:

$users = App\tempLogin::where('mobile','=',$mobile)->toArray();

然后您可以像这样访问它:

foreach($users as $user)
{
    // now the $user contains an array containing each row data.
    $name = $user["name"];
}

如果您想访问单个用户:

$user = App\tempLogin::where('mobile','=',$mobile)->first();
$name = $user->name;

这将获取第一个(偏移0,限制1)行。您需要指定顺序以获得所需的第一行。