在控制器中获取特定信息?
Getting specific information in controller?
我在使用我的控制器并在其中获取数据时遇到问题。我的问题是当我这样组建我的团队时:
$team = Team::where('join_number', '=', $data['team'])->get();
我似乎无法通过
访问它
$team->join_request_needed = 'True'
例如?如果我死掉
$team->join_request_needed
我得到一个 'Property [join_request_needed] does not exist on this collection instance'。
我怎样才能访问这些数据?如果我死了 dump $team 我明白了;所以它获取数据?
Illuminate\Database\Eloquent\Collection {#282 ▼
#items: array:1 [▼
0 => App\Team {#291 ▼
#guarded: []
#connection: "sqlite"
#table: "teams"
#primaryKey: "id"
#keyType: "int"
+incrementing: true
#with: []
#withCount: []
#perPage: 15
+exists: true
+wasRecentlyCreated: false
#attributes: array:8 [▶]
#original: array:8 [▼
"id" => "1"
"user_id" => "1"
"name" => "team1"
"description" => null
"join_request_needed" => "0"
"join_number" => "1574832472024"
"created_at" => "2019-11-27 05:27:52"
"updated_at" => "2019-11-27 22:46:55"
]
#changes: []
#casts: []
#dates: []
#dateFormat: null
#appends: []
#dispatchesEvents: []
#observables: []
#relations: []
#touches: []
+timestamps: true
#hidden: []
#visible: []
#fillable: []
}
]
}
这是我的整个函数(因为我一直在获取数据,所以到目前为止只是粗略的):
public function check() {
$data = request()->validate([
'email' => ['required', 'email'],
'team' => ['required', 'alpha_num', 'exists:teams,join_number']
]);
$team = Team::where('join_number', '=', $data['team'])->get();
if ($team->join_request_needed = 'True') {
if (Member::where('email', '=', $data['email'])->count() > 0) {
$member = Member::where('email', '=', $data['email']);
if ($member->approved = 'True') {
// member has been accepted
return view('portal.members.answer', [
'team' => $team
]); // questions
} else {
// member has not been accepted
dd('member has not been accepted');
return view(''); // waiting screen
}
} else {
// create a join request for the member
$team->member()->create([
'email' => $data['email']
]);
return view(''); // waiting screen
}
} else if(Member::where('email', '=', $data['email'])->count() > 0) {
// no join request needed, member already exists
return view('portal.members.answer', [
'team' => $team
]); // questions
} else {
// no join request needed, need to create member
dd($team);
$team->member()->create([
'email' => $data['email']
]);
return view('portal.members.answer', [
'team' => $team
]); // questions
}
}
Team 在您的例子中是 Teams 的集合,因此您可以使用 querybuilder 方法 first()
$team = Team::where('join_number', '=', $data['team'])->first();
由于查询的工作方式,在查询生成器上调用 get 将始终 return 一个集合。如果你想要单个对象 first()
或 find()
是选项。
因为您正在收集 Team
和 join_number = $data['team']
您需要先循环 $team
。但是如果你只想拥有一个拥有 join_number = $data['team']
的 $team 你应该做 first()
而不是 get()
我在使用我的控制器并在其中获取数据时遇到问题。我的问题是当我这样组建我的团队时:
$team = Team::where('join_number', '=', $data['team'])->get();
我似乎无法通过
访问它$team->join_request_needed = 'True'
例如?如果我死掉
$team->join_request_needed
我得到一个 'Property [join_request_needed] does not exist on this collection instance'。 我怎样才能访问这些数据?如果我死了 dump $team 我明白了;所以它获取数据?
Illuminate\Database\Eloquent\Collection {#282 ▼
#items: array:1 [▼
0 => App\Team {#291 ▼
#guarded: []
#connection: "sqlite"
#table: "teams"
#primaryKey: "id"
#keyType: "int"
+incrementing: true
#with: []
#withCount: []
#perPage: 15
+exists: true
+wasRecentlyCreated: false
#attributes: array:8 [▶]
#original: array:8 [▼
"id" => "1"
"user_id" => "1"
"name" => "team1"
"description" => null
"join_request_needed" => "0"
"join_number" => "1574832472024"
"created_at" => "2019-11-27 05:27:52"
"updated_at" => "2019-11-27 22:46:55"
]
#changes: []
#casts: []
#dates: []
#dateFormat: null
#appends: []
#dispatchesEvents: []
#observables: []
#relations: []
#touches: []
+timestamps: true
#hidden: []
#visible: []
#fillable: []
}
]
}
这是我的整个函数(因为我一直在获取数据,所以到目前为止只是粗略的):
public function check() {
$data = request()->validate([
'email' => ['required', 'email'],
'team' => ['required', 'alpha_num', 'exists:teams,join_number']
]);
$team = Team::where('join_number', '=', $data['team'])->get();
if ($team->join_request_needed = 'True') {
if (Member::where('email', '=', $data['email'])->count() > 0) {
$member = Member::where('email', '=', $data['email']);
if ($member->approved = 'True') {
// member has been accepted
return view('portal.members.answer', [
'team' => $team
]); // questions
} else {
// member has not been accepted
dd('member has not been accepted');
return view(''); // waiting screen
}
} else {
// create a join request for the member
$team->member()->create([
'email' => $data['email']
]);
return view(''); // waiting screen
}
} else if(Member::where('email', '=', $data['email'])->count() > 0) {
// no join request needed, member already exists
return view('portal.members.answer', [
'team' => $team
]); // questions
} else {
// no join request needed, need to create member
dd($team);
$team->member()->create([
'email' => $data['email']
]);
return view('portal.members.answer', [
'team' => $team
]); // questions
}
}
Team 在您的例子中是 Teams 的集合,因此您可以使用 querybuilder 方法 first()
$team = Team::where('join_number', '=', $data['team'])->first();
由于查询的工作方式,在查询生成器上调用 get 将始终 return 一个集合。如果你想要单个对象 first()
或 find()
是选项。
因为您正在收集 Team
和 join_number = $data['team']
您需要先循环 $team
。但是如果你只想拥有一个拥有 join_number = $data['team']
的 $team 你应该做 first()
而不是 get()