Php 基本选择与Laravel雄辩不起作用

Php 基本选择与Laravel雄辩不起作用,php,laravel,eloquent,Php,Laravel,Eloquent,我有两个表:用户和需求。在表requireds中,我将用户id作为外键。 用户使用名称登录(我在整个会话中都使用了该名称)。 我想做的是: -拥有用户的名称(他的登录)->因为我没有实现会话,所以我将名称直接写在代码中。 -由于他的名字,搜索他的身份证。 -用他的身份证搜索他的所有要求 $name = "Jason"; $UserID = User::select('id')->where('name', '=', $name)->get(); $User= User::

我有两个表:
用户
需求
。在表
requireds
中,我将
用户id
作为外键。 用户使用名称登录(我在整个会话中都使用了该名称)。 我想做的是: -拥有用户的名称(他的登录)->因为我没有实现会话,所以我将名称直接写在代码中。 -由于他的名字,搜索他的身份证。 -用他的身份证搜索他的所有要求

  $name = "Jason";
  $UserID = User::select('id')->where('name', '=', $name)->get();
  $User= User::find($UserID);
  $demands = Demand::where('user_id', '=', $UserID)->get();
  echo $demands;
我的数组是空的。但在我的数据库中,我对这个用户id有3个要求

你们有什么线索吗


诚恳地说。

get
函数返回的是一个雄辩的集合,而不是种子值。您必须首先使用
功能。此函数将返回查询的第一行

 $name = "Jason";
  $UserID = User::select('id')->where('name', '=', $name)->first();
  $User= User::find($UserID);
  $demands = Demand::where('user_id', '=', $UserID->id)->get();
  echo $demands;


$UserID
是一个集合,而不是整数。试试这个:

$name = "Jason";
$user = User::select('id')->where('name', '=', $name)->first();
$User= User::find($user->id);
$demands = Demand::where('user_id', '=', $User->id)->get();
echo $demands;
请换

$UserID = User::select('id')->where('name', '=', $name)->get();


由于用户已登录,这意味着他已通过身份验证。 试试这个

$UserID = Auth::user()->id;

$demands = Demand::where('user_id', '=', $UserID);

echo $demands;

其他人都认为第一个查询返回集合是正确的。但是你正在做一个这里不需要的额外查询。这可以简化为只查询一次用户表

$name = "Jason";
$User = User::where('name', '=', $name)->first();
//$User= User::find($UserID); remove this as it is not needed.

if(!$User) {
    return "User not found";
}

$demands = Demand::where('user_id', '=', $User->id)->get();
echo $demands;

为什么只选择ID,然后执行另一个查询以获取整行?为什么不直接从第一个查询中获取整行呢<代码>用户::其中('name','=',$name)->first()
你应该建立一些适当的有说服力的关系,这将使获得用户的需求像
$user->demands
一样容易。我在用户模型中有这样一点:return$this->hasMany('App\demands');更简单:
User::whereName($name)->value('id')
。如果我想搜索名称以外的内容?就像学生号一样。@IsmaElzem同样的方法
studentid(12345)
将在
student\u id
列中搜索
12345
。你说得对!我把Jason换成了另一个名字,这个名字在数据库中,有一个名字。但是我有一个错误:
试图在这一行获取非对象的属性“id”
$demands=Demand::where('user_id','=',$user->id)->get()
您应该在查询之后添加一个检查,如
if($User){}
,以确保找到了一个用户,如果没有,则返回一个错误。或者,您可以使用
firstOrFail()
和Laravel将自动返回404。由于找不到用户,但您说它确实存在,请检查案例,确保没有任何空格或类似的内容。我不知道为什么会出现此错误。。。我只是复制/粘贴名称,不多也不少。我使用的是
$requireds
after,因此如果我将其放入
if
,我将无法在after中使用它。如果您找不到用户,那么您甚至无法获取需求,因此您应该返回一个错误,而不是继续。
$name = "Jason";
$User = User::where('name', '=', $name)->first();
//$User= User::find($UserID); remove this as it is not needed.

if(!$User) {
    return "User not found";
}

$demands = Demand::where('user_id', '=', $User->id)->get();
echo $demands;