Commodity.php 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. <?php
  2. namespace App;
  3. use Illuminate\Database\Eloquent\Builder;
  4. use Illuminate\Database\Eloquent\Model;
  5. class Commodity extends Model
  6. {
  7. protected $fillable=['name','sku','owner_id','created_at'];
  8. protected $appends=['barcode','owner_name','owner_code'];
  9. public function barcodes()
  10. {
  11. return $this->hasMany('\App\CommodityBarcode');
  12. }
  13. public function owner(){
  14. return $this->belongsTo('App\Owner','owner_id','id');
  15. }
  16. public function getBarcodeAttribute(){
  17. return $this->barcodes()->first()['code'];
  18. }
  19. public function getOwnerNameAttribute(){
  20. return $this->owner()->first()['name'];
  21. }
  22. public function getOwnerCodeAttribute(){
  23. return $this['owner'] ? $this['owner']['code'] : null;
  24. }
  25. static function newCommodityBy_BarcodeOwnerIdNameSku($barcode,$ownerId,$name,$sku){
  26. $barcodes=rtrim($barcode,',');
  27. $barcodes=explode(',',$barcodes);
  28. foreach ($barcodes as $k=>$barcode){
  29. if(!trim($barcode)) unset($barcodes[$k]);
  30. }
  31. $commodities=[];
  32. foreach ($barcodes as $barcode){
  33. if(!trim($barcode))continue;
  34. $commodity=Commodity::whereHas('barcodes', function (Builder $query)use($barcode){
  35. $query->where('code',$barcode);
  36. })->where('name',$name)->where('owner_id',$ownerId)->first();
  37. if($commodity)$commodities[]=$commodity;
  38. }
  39. if(count($barcodes)==count($commodities)&&count($commodities)>0){//过滤掉仅有一个条码相等的。
  40. $commodity=$commodities[0];
  41. }else{
  42. $commodity=null;
  43. }
  44. if(!$commodity){
  45. $commodity=new Commodity(['name'=>$name,'sku'=>$sku,'owner_id'=>$ownerId]);
  46. $commodity->save();
  47. }else{
  48. if(!isset($commodity['name'])||(!isset($commodity['sku'])||$sku)){
  49. $commodity['name']=$name;
  50. $commodity['sku']=$sku;
  51. $commodity->save();
  52. }
  53. }
  54. foreach ($barcodes as $barcode){
  55. if(!trim($barcode))continue;
  56. // if(preg_match('/[\x{4e00}-\x{9fa5}]/u',$barcode))continue;
  57. $commodityBarcode=CommodityBarcode::where('code',$barcode)->where('commodity_id',$commodity['id'])->first();
  58. if(!$commodityBarcode){
  59. $commodityBarcode=new CommodityBarcode(['code'=>$barcode,'commodity_id'=>$commodity['id']]);
  60. $commodityBarcode->save();
  61. }
  62. }
  63. return $commodity;
  64. }
  65. public function newBarcode($barcode){
  66. $commodityBarcode=CommodityBarcode::where('commodity_id',$this['id'])->where('code',$barcode)->first();
  67. if(!$commodityBarcode){
  68. $commodityBarcode=new CommodityBarcode(['commodity_id'=>$this['id'],'code'=>$barcode]);
  69. $commodityBarcode->save();
  70. }
  71. }
  72. }