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;