Laravel如果数量表上不存在,则显示表产品

时间:2018-08-10 15:47:36

标签: php mysql laravel eloquent

在PHP-MySQL中,我可以创建此查询...

$sql = "SELECT * FROM product"; 
$result = $conn->query($,con, $sql);
while($row =mysql_fetch_array($result)){
    $sqlquantity = "SELECT * FROM quantity where branchid='4' and productid='$row['productid']'"; 
    $resultquantity = $conn->query($,con, $sqlquantity);
    if (mysqli_num_rows($resultquantity) == 0) {
        echo $row['productname']. "not available in branch"
    }
    else {
         echo $row['productname']. "available in branch"
    }
}

但是如何使用Laravel做到这一点?

我有3张桌子

  +-----------------+   +-----------------+    +----------------+ 
  |  product table  |   | quantity table  |    |  branch table  |
  +-----------------+   +-----------------+    +----------------+
  |   id            |   |  productid      |    |   id           |
  |   productname   |   |  branchid       |    |   branchname   |
  +-----------------+   |  quantity       |    +----------------+
                        +-----------------+

我的问题是我试图创建一个modelviewcontroller,在其中可以显示每个{{ 1}}基于products表。有人可以帮忙吗?

产品型号

branch

数量模型

quantity

分支模型

public function quantity()
{
    return $this->hasMany('App\Quantity', 'productid', 'id');
}

我要创建的是,如果public function product() { return $this->belongsTo('App\Product', 'productid', 'id'); } 不存在,则可以查看public function products() { return $this->hasMany('App\Quantity', 'branchid', 'id'); } branch product

2 个答案:

答案 0 :(得分:1)

您也可以尝试这个...

请检查Official Docs上的多对多关系以获取更好的解释。

您无需创建Quantity模型,因为它可以用作pivotProduct模型之间的Branch或联接表(不是实体)。由于您具有自定义数据透视表名称quantity,因此需要将其传递给第二个参数,否则Eloquent会自动为您创建一个branch_product表名称(字母顺序)。第三个和第四个参数分别是当前模型和联接模型的外键。

产品型号

public function branches()
{
    return $this->belongsToMany('App\Branch', 'quantity', 'productid', 'branchid')
                ->withPivot('quantity');  //additional pivot column 
}

分支模型

public function products()
{
    return $this->belongsToMany('App\Product', 'quantity', 'branchid', 'productid')
                ->withPivot('quantity');
}

产品负责人

 $products = Product::all();

 if($products){
    $x = 0;

    foreach ($products as $prod) {

         $products[$x] = $prod->branches()
         //  ->wherePivot('productid', '=', $prod->id)
             ->wherePivot('branchid', '=', 4)
             ->wherePivot('quantity', '=', 0)
             ->get();
         $x++;
    }
  }

  return response(['products' => $products],200); 
        //get all the products in branch 4 with quantity = 0

然后,您可以执行条件if来确定它是否可用。

答案 1 :(得分:0)

您可以使用whereHas()这样的方法:

Product::whereHas( 'Quantity', function($sQuery){
    $sQuery->where('branchid', 4);
})->get();