1

テーブル名がローカルで命名されているデータベースで作業しています。

table.product
-- id
-- picture
-- category_id

table.category
-- id
-- caterory_name
-- category_directory

表にいくつかの製品があります。製品が目的のテーブルに属していることをシステムが理解できるようにproduct.category_idポイントする必要があります。category.id

これは INNER JOIN を使用して実行できますが、Laravel では実行できません。おそらく has/belongs_to などでモデルを設定する必要があります。

これが私たちが苦労するところです。

//Controller
$products = Product::all();

return View::make('theme-admin.product_list')
    ->with('products', $products);

//View (in foreach)
{{ URL::to('uploads/categories/[NEED_CATEGORY.CATEGORY_DIRECTORY_HERE]/' . $products[$k]->picture) }}

渡すだけCategory.category_directoryなので、ビューで情報を取得することはできません。Product::all()

category.category_directory$products 配列にも各値が含まれ、次のようにアクセスできるようにするにはどうすればよいですか。$products[$k]->category_name?

ありがとう!

4

2 に答える 2

1

私は関係をセットアップします...

class Product extends Eloquent {

 public function category()
 {
  return $this->belongsTo('Category');
 }

 }

class Category extends Eloquent {

 public function product()
 {
  return $this->hasMany('Product');
 }

 }

関係で使用する名前はモデル名です.....モデル名とは異なるテーブル名を使用している場合は、モデルで設定してください

protected $table = "yourtablename";

じゃあこんな風に使って…

{{ URL::to('uploads/categories/'.$products[$k]->category->category_directory.'/' 

このようにデータベースに何度もクエリを実行することになります...これは N+1 効果と呼ばれます。たとえば、5 つの製品がある場合、それらの製品を取得するために 1 つのクエリが実行されます。次に、ループ内でクエリを実行してカテゴリを取得します。これにより、合計 6 つのクエリが発生します。

この問題を解決するには、熱心な読み込みを使用します。これにより、この例の 6 つのクエリが 2 に減少します。

 $products = Product::with('category')->get();

次に、それをビューに送信し、そこで foreach ループを実行できます..

 foreach($products as $val){
 //To output the directory
 echo $val->category->category_directory;

 }

それともブレードで...

@foreach($products as $val)
{{URL::to('uploads/categories/'.$val->category->category_directory.'/'.$val->picture)}}
@endfor
于 2013-06-21T19:28:43.250 に答える
1

Product モデルにカテゴリ関係を作成します。

class Product extends Eloquent {

  private $table = 'myProductsTableName';

  public function category()
  {
    return $this->belongsTo('Category', 'myCategoryColumnID');
  }

}

class Category extends Eloquent {

  private $table = 'myCategoriesTableName';

}

特定のカテゴリからすべての製品を選択する必要がない限り、Category モデルで hasMany リレーションを作成する必要はありません。

また、製品テーブルが singular_table_name_id ルール (product_id) に従っていない場合は、myCategoryColumnID を使用する必要があります。

次に、それを使用します。

//View (in foreach)
{{ URL::to('uploads/categories/'.$products[$k]->category->category_directory.'/' . $products[$k]->picture) }}
于 2013-06-21T19:17:23.723 に答える