나는 4 개 테이블을 가지고있다.Laravel 관계 문제
정상적으로 작동하지만 실제로는 그렇지 않습니다. 생성 된 쿼리가 잘못된 결과를 반환합니다. 여기
내 모델 파일은 다음과 같습니다<?php
class Shop_Item extends Eloquent
{
public static $table = 'items';
public static $timestamps = false;
public function scategory() {
return $this->has_one('Shop_Category','id');
}
public function ssize() {
return $this->has_one('Shop_Size','id');
}
public function scolor() {
return $this->has_one('Shop_Color','id');
}
}
나머지 테이블에 대한 모델 파일의 나머지 (테이블 이름 및 모델 이름 제외) 동일합니다.
<?php
class Shop_Category extends Eloquent
{
public static $table = 'item_categories';
public static $timestamps = false;
}
그래서 내가 잘못된 결과를 얻을, 여분의 값 (크기 -> 이름, 색상 -> 이름, 범주 -> 이름)에 액세스하려고 할 때.
데이터베이스에 두 개의 테스트 레코드가 있습니다. 항목 1과 항목 2는 색상, 크기 및 카테고리가 다릅니다. 항목 1은 파란색이고 M 크기 인 입니다. 항목 2는 녹색이고 크기는 XL이지만 반환 된 쿼리에는 없습니다. 저를 보여주는, 그 항목이 빨간색이며, S.
컨트롤러의 크기가 :
<?php
class Admin_Shop_Controller extends Base_Controller {
public function action_index() {
$items = Shop_item::order_by('name')->paginate(10,array('id','name','price','sex','visible','color','size','category'));
return View::make('admin.shop.index')->with('items', $items);
}
보기 :
@forelse($items->results as $i)
{{ $i->name }}
{{ $i->price }}
{{ $i->sex }}
{{ $i->scategory->name }}
{{ $i->scolor->name }}
{{ $i->ssize->name }}
<a href = "{{ URL::to('admin/shop/edit/'.$i->id) }}">Edit</a>
<a href = "#">Delete</a>
@empty
There are no items in the shop.
@endforelse
쿼리가 생성 :
0.23ms
SELECT COUNT(`id`) AS `aggregate` FROM `items`
0.28ms
SELECT `id`, `name`, `price`, `sex`, `visible`, `color`, `size`, `category` FROM `items` ORDER BY `name` ASC LIMIT 10 OFFSET 0
0.25ms
SELECT * FROM `item_categories` WHERE `id` IN ('1', '2')
0.21ms
SELECT * FROM `item_sizes` WHERE `id` IN ('1', '2')
0.36ms
SELECT * FROM `item_colors` WHERE `id` IN ('1', '2')
주를이 다른 테이블에서 이러한 값에 액세스하는 경우보기에서 :
{{ Shop_Color::find($i->color)->name }}
올바른 결과를 얻지 만, 실제로이 때문에 데이터베이스를 n + 3 번 쿼리하고 싶지 않습니다. 어떤 제안을 잘못 했나요?
편집 :아직 운이 없습니다. . :(내가, 당신이 나열된 변경을 완료 그들과 함께 실험을하지만이 일이 여전히 작동하지 않는 한 현재 오류가 있습니다 : 그것은 id를 찾는 이유
SQLSTATE[42S22]: Column not found: 1054 Unknown column 'id' in 'where clause'
SQL: SELECT * FROM `item_colors` WHERE `id` IN (?)
Bindings: array (
0 => 0,
)
나도 몰라, 내가 변경했습니다 (
필자는 프론트 엔드 페이지에서 (주로) 필자가 필요하기 때문에 모델 파일에 $ include를 사용했다. 그러나 그것은 언급 된 분야에 대해 여전히 나에게 잘못된 결과를주었습니다. – peaks
'return $ this-> has_one ('Shop_Category', 'id');'... 'id'를 고를 때'color '를 고르는 법을 알고 있다고 생각하십니까? –
Phill의 코멘트에 대한 내 의견은 아래를 참조하십시오. – peaks