【问题标题】:best way to query my database using laravel使用 laravel 查询我的数据库的最佳方法
【发布时间】:2020-04-23 00:46:19
【问题描述】:

我开始使用 Laravel 做一个小项目,所以我的数据库中有三个表

  1. 产品
  2. 类别
  3. 品牌

我想在 HTML 表格中列出我的所有产品,现在我在我的控制器中使用这个方法 leftJoin 是正确的方法,或者我必须用 eloquent 做到这一点,如果是的话怎么给我一个例子

public function index()
{
    $query = DB::table('products')
    ->leftJoin('categories','categories.id', '=', 'products.product_category')
    ->leftJoin('brands','brands.id', '=', 'products.product_brand')
    ->leftJoin('suppliers','suppliers.id', '=', 'products.product_supplier')
    ->orderBy('products.id', 'desc')->paginate(15);
    return response()->json($query);
}

这是我的结果:

"data": [
    {
        "id": null,
        "product_name": "Dylan Hernandez",
        "product_sell_as": "Delectus pariatur",
        "product_upc": 12541,
        "product_sku": "12541",
        "product_description": "Et enim quisquam ani",
        "product_category": 2,
        "product_supplier": 2,
        "product_buying_price": "390.00",
        "product_selling_price": "226.00",
        "product_min_stock": "10.00",
        "product_max_stock": "10.00",
        "product_alert_stock": 10,
        "product_alert_phone": "+1 (955) 289-5975",
        "product_alert_email": "mexi@mailinator.net",
        "product_cost_price": "145.00",
        "product_supplier_discount": "10.00",
        "product_uom": 2,
        "product_brand": 2,
        "product_warehouse": 2,
        "product_availability": 2,
        "product_image": "public/product/tDlkQkCZA4aWDnFkWIed8TKQEP0Wgu0zYGtYfD5T.jpeg",
        "deleted_at": null,
        "created_at": null,
        "updated_at": null,
        "category_name": "Shoes",
        "brand_name": "Dolce Gabana",
        "supplier_company": null,
        "supplier_code": null,
        "supplier_tax_number": null,
        "supplier_phone": null,
        "supplier_fax": null,
        "supplier_website": null,
        "supplier_email": null,
        "supplier_note": null,
        "supplier_type": null,
        "supplier_address": null,
        "supplier_city": null,
        "supplier_state": null,
        "supplier_zip": null,
        "supplier_country": null,
        "supplier_representative": null,
        "supplier_price_list": null,
        "supplier_tax_type": null,
        "supplier_currency": null
    }
  ]

【问题讨论】:

  • 你想要什么样的响应结构?以及它们之间的关系是什么
  • @TsaiKoga 我更新了我的问题;)
  • 如果productscategories 是一对多的,而productsbrand 是一对多的,你可以通过关系来实现。
  • 你能举个例子吗,我是 laravel 的新手

标签: php laravel eloquent


【解决方案1】:

尝试使用 Eloquent one-to-many 会很优雅:

在您的类别模型中

        public function products()
        {
            return $this->hasMany(\App\Product::class, 'product_category', 'id');
        }

在您的品牌模型中:

        public function products()
        {
            return $this->hasMany(\App\Brand::class, 'brand', 'id');
        }

在您的供应商模型中:

        public function products()
        {
            return $this->hasMany(\App\Supplier::class, 'product_supplier', 'id');
        }

在您的产品模型中:

        public function category()
        {
            return $this->belongsTo(\App\Category::class, 'product_category');
        }

        public function brand()
        {
            return $this->belongsTo(\App\Brand::class, 'brand');
        }  

        public function supplier()
        {
            return $this->belongsTo(\App\Supplier::class, 'product_supplier');
        }

所以你可以像这样查询:

Product::with(['category', 'brand', 'supplier'])->orderBy('id', 'desc')->paginate(15);

【讨论】:

  • 谢谢供应商呢?
  • @AmineBouhaddi 同理,需要在模型中添加关系。更新
猜你喜欢
  • 2023-03-18
  • 2013-11-11
  • 2011-06-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-08-27
  • 2012-05-25
  • 2021-01-28
相关资源
最近更新 更多