Larabel Alturnal의 "With()" 함수를 사용하여 특정 열 가져오기
테이블이 두 개 있는데User
그리고.Post
.하나.User
많은 것을 가질 수 있다posts
그리고 하나post
한 사람만의 것이다user
.
인마이User
내가 가지고 있는 모델hasMany
관계...
public function post(){
return $this->hasmany('post');
}
그리고 내 안에post
내가 가지고 있는 모델belongsTo
관계...
public function user(){
return $this->belongsTo('user');
}
이제 이 두 테이블을 결합합니다.Eloquent with()
두 번째 표의 특정 열을 원합니다.Query Builder를 사용할 수 있지만 사용할 수 없습니다.
에 있을 때Post
내가 쓰는 모델...
public function getAllPosts() {
return Post::with('user')->get();
}
다음 쿼리를 실행합니다...
select * from `posts`
select * from `users` where `users`.`id` in (<1>, <2>)
하지만 내가 원하는 건...
select * from `posts`
select id,username from `users` where `users`.`id` in (<1>, <2>)
사용할 때...
Post::with('user')->get(array('columns'....));
첫 번째 테이블의 열만 반환합니다.다음을 사용하여 특정 열 지정with()
두 번째 테이블에서요.내가 어떻게 그럴 수 있을까?
글쎄, 난 해결책을 찾았어.통과하면 할 수 있다.closure
에서 기능하다.with()
같은 배열의 두 번째 지표로서
Post::query()
->with(['user' => function ($query) {
$query->select('id', 'username');
}])
->get()
선택만 됩니다.id
그리고.username
다른 테이블에서.이것이 다른 사람들에게 도움이 되기를 바랍니다.
프라이머리 키(이 경우는 ID)는, 의 첫 번째 파라메타로 할 필요가 있습니다.$query->select()
필요한 결과를 얻을 수 있습니다.*
Larabel 5.5부터 다음과 같이 할 수 있습니다.
Post::with('user:id,username')->get();
케어:id
필드 및foreign keys
문서에 기재된 바와 같이:
이 기능을 사용할 때는 항상 id 열과 관련된 외부 키 열을 가져올 열 목록에 포함해야 합니다.
예를 들어 사용자가 팀에 소속되어 있으며,team_id
그러면 외부 키 열로 지정됩니다.$post->user->team
지정하지 않으면 비어 있습니다.team_id
Post::with('user:id,username,team_id')->get();
또한 사용자가 게시물에 속해 있는 경우(즉, 열이 있음)post_id
에서users
table)에서 다음과 같이 지정해야 합니다.
Post::with('user:id,username,post_id')->get();
그렇지않으면$post->user
비게 됩니다.
특정 열을 사용하여 모형을 로드하는 경우 급하게 로드하지는 않지만 다음을 수행할 수 있습니다.
고객님의 고객명Post
모델
public function user()
{
return $this->belongsTo('User')->select(['id', 'username']);
}
원래 크레딧은 Larabel Expiry Loading - 특정 열만 로드
반대 방향(많은 경우):
User::with(array('post'=>function($query){
$query->select('id','user_id');
}))->get();
관계를 해결하기 위해 외부 키(이 예에서는 user_id라고 가정)를 포함하는 것을 잊지 마십시오.그렇지 않으면 관계에 대한 결과가 0이 됩니다.
Larabel 5.7에서는 다음과 같이 특정 필드를 호출할 수 있습니다.
$users = App\Book::with('author:id,name')->get();
추가하는 것이 중요합니다.foreign_key
필드를 선택합니다.
다음을 사용하여 특정 열을 가져오려면with()
라라벨 웅변에서는 다음과 같은 코드를 사용할 수 있습니다.이 코드는 원래 @Adam이 이 질문에 대한 답변으로 답변한 것입니다.답변의 주요 코드는 다음과 같습니다.
Post::with('user:id,username')->get();
그래서 나는 그것을 내 코드에 사용했지만 그것은 나에게 에러를 주고 있었다. 그래서 너희들도 같은 문제에 직면해 있다면
그런 다음 이 문제를 해결하려면 다음 코드와 같이 메서드의 id 열 앞에 테이블 이름을 지정해야 합니다.
Post::with('user:user.id,username')->get();
나는 이 문제를 발견했지만 두 번째 관련 오브젝트 층을 발견했다.@Awais Qarni의 답변은 네스트된 선택문에 적절한 외부 키를 포함시키는 것으로 유효합니다.첫 번째 중첩된 선택 문에서 관련 모델을 참조하기 위해 ID가 필요한 것처럼 두 번째 수준의 관련 모델(이 예에서는 회사 모델)을 참조하기 위해 외부 키가 필요합니다.
Post::with(['user' => function ($query) {
$query->select('id','company_id', 'username');
}, 'user.company' => function ($query) {
$query->select('id', 'name');
}])->get();
또한 Post 모델에서 특정 열을 선택할 경우 참조하기 위해 select 문에 user_id 열을 포함해야 합니다.
Post::with(['user' => function ($query) {
$query->select('id', 'username');
}])
->select('title', 'content', 'user_id')
->get();
고객님의 고객명Post
표시:
public function userWithName()
{
return $this->belongsTo('User')->select(array('id', 'first_name', 'last_name'));
}
, 그럼 에는 '어울릴 수 .$post->userWithName
특정 열을 빠르게 로드할 수 있는 다른 방법이 있습니다.
public function show(Post $post)
{
$posts = $post->has('user')->with('user:id,name,email,picture')->findOrFail($post->id);
return view('your_blade_file_path',compact('posts);
}
고객님의 고객명Post
있어야 할 user
public function user()
{
return $this->belongsTo( User::class, 'user_id')->withDefault();
}
주의: Laravel 문서에 기재되어 있습니다.
https://laravel.com/docs/8.x/eloquent-relationships#eager-loading-specific-columns
estado_id를 반환하지 않고 같은 답변을 받고 싶습니다.
$this->cidade
->with('estado:id,nome')
->select(['id', 'nome', 'estado_id']);
선택 항목에 estado_id를 입력하지 않은 경우
{
"id": 1100015,
"nome": "Alta Floresta D'Oeste",
"estado": null
}
선택 항목에 estado_id를 입력하면
{
"id": 1100015,
"nome": "Alta Floresta D'Oeste",
"estado_id": 11,
"estado": {
"id": 11,
"nome": "Rondônia"
}
}
기대됩니다
{
"id": 1100015,
"nome": "Alta Floresta D'Oeste",
"estado": {
"id": 11,
"nome": "Rondônia"
}
}
표의 열이 하나만 필요한 경우 '목록'을 사용하는 것이 좋습니다.내 경우 사용자가 즐겨찾는 기사를 가져오고 있지만 문서 ID만 원합니다.
$favourites = $user->favourites->lists('id');
다음과 같은 ID 배열을 반환합니다.
Array
(
[0] => 3
[1] => 7
[2] => 8
)
PHP 7.4 이후를 사용하는 경우 화살표 기능을 사용하여 보다 깔끔하게 표시할 수도 있습니다.
Post::with(['user' => fn ($query) => $query->select('id','username')])->get();
사용자 모델(Laravel 8.x.x)과 belongs To Many 관계를 사용하다가 동일한 문제에 직면했습니다.
오랜 검색과 시행 및 테스트 방법.나는 이 답을 알아냈다.
ID 및 관계에 필요한 외부 키를 해당 관계 중 하나에서 선택해야 합니다.이를 통해 웅변가는 부모를 자녀와 연결시킬 수 있습니다.
원본 크레딧은 https://stackoverflow.com/a/64233242/1551102로 보내드립니다.
그래서 나는 포함시켰다.
Groups::select('groupid')
...
그리고 그것은 마법처럼 작동했다.지금은 가져오기 후 groupid 필드를 숨기는 방법을 알고 싶습니다.어레이를 루프하여 제거할 수 있습니다.하지만 다른 방법이 있을까요?어쩌면 더 단순하고 더 나은 방법일 수도 있죠
모델에 액세스할 때 관련 모델에 열을 지정할 수도 있습니다.
Post::first()->user()->get(['columns....']);
이 코드를 사용해 보세요.라라벨 6 버전으로 테스트되고 있습니다.
Controller code public function getSection(Request $request)
{
Section::with(['sectionType' => function($q) {
$q->select('id', 'name');
}])->where('position',1)->orderBy('serial_no', 'asc')->get(['id','name','','description']);
return response()->json($getSection);
}
Model code
public function sectionType(){
return $this->belongsTo(Section_Type::class, 'type_id');
}
, 그럼 에는 '어울리지 않다'를 사용하시면 .pluck
의 Collection
: " " 。
" " "만 반환됩니다.uuid
「」의 Post model
App\Models\User::find(2)->posts->pluck('uuid')
=> Illuminate\Support\Collection {#983
all: [
"1",
"2",
"3",
],
}
조건부로 해 보세요.
$id = 1;
Post::with(array('user'=>function($query) use ($id){
$query->where('id','=',$id);
$query->select('id','username');
}))->get();
다른 솔루션과 마찬가지로 다음과 같습니다.
// For example you have this relation defined with "user()" method
public function user()
{
return $this->belongsTo('User');
}
// Just make another one defined with "user_frontend()" method
public function user_frontend()
{
return $this->belongsTo('User')->select(array('id', 'username'));
}
// Then use it later like this
$thing = new Thing();
$thing->with('user_frontend');
// This way, you get only id and username,
// and if you want all fields you can do this
$thing = new Thing();
$thing->with('user');
때, 이 말을는, 해 주세요.key
열은 아무것도 반환하지 않습니다.「 」만는,username
★★★★★★★★★★★★★★★★★ id
, 「」, 「」를 할 수 .$visible/$hidden
다음과 같이 합니다.
앱/모델/User.php
protected $visible = ['username'];
그런 다음 검색만 합니다.username
§:
Post::with('user')->get();
key
§:
'숨기다', '', '숨기다', '숨기다', '숨기다',key
원하는 열만 가져옵니다.
앱/모델/User.php
protected $hidden = ['id'];
하다를 포함하여 합니다.key
않으면 , 「유저명」은 반환되지 않기 때문입니다.id
$hidden
.
Post::with('user:id,username')->get();
EmployeeGatePassStatus::with('user:id,name')->get();
언급URL : https://stackoverflow.com/questions/19852927/get-specific-columns-using-with-function-in-laravel-eloquent
'programing' 카테고리의 다른 글
Java를 사용하여 이미지 크기를 조정하려면 어떻게 해야 합니까? (0) | 2022.09.19 |
---|---|
Django 모델에서 mySQL ENUM 지정 (0) | 2022.09.19 |
MYSQL_ROOT_PASSWORD 환경변수가 mariadb 컨테이너에 설정되어 있지 않다. (0) | 2022.09.19 |
Python: 목록에서 요소 찾기 (0) | 2022.09.19 |
MySQL: 사용자가 존재하는지 확인한 후 삭제 (0) | 2022.09.19 |