【问题标题】:Laravel One to many CRUD ExampleLaravel 一对多 CRUD 示例
【发布时间】:2014-08-03 20:46:08
【问题描述】:

我是 Laravel 的新手。我想用 Laravel4 将数据插入到某些主从表中。我搜索了整个互联网,找不到合适的解决方案。

我有两个(加一个)表,如下所示。

PO_HEADER

PO_HEADER_ID
SUBJECT
PO_DATE 

PO_DETAIL

PO_DETAIL_ID
PO_HEADER_ID
DESCRIPTION
AMOUNT
QTY
UNIT_OF_MEASURE_ID

UNIT_OF_MEASURE

UNIT_OF_MEASURE_ID
UNIT_OF_MEASURE

按下保存按钮时,我应该能够一次性插入 PO 主文件以及尽可能多的 PO 详细记录。详细信息部分中的计量单位应该是一个下拉列表(从UNIT_OF_MEASURE 表中填写)

请建议如何轻松实现这一目标。提前致谢!

【问题讨论】:

    标签: php mysql laravel-4 one-to-many


    【解决方案1】:

    这取决于您的模型设置是否正确:

    class PurchaseOrder extends \Eloquent
    {
        protected $fillable = [
            'subject',
            'date'
        ];
    
        public function detail()
        {
            return $this->hasMany('PurchaseOrderDetail');
        }
    }
    
    class PurchaseOrderDetail extends \Eloquent
    {
        protected $fillable = [
            'description',
            'amount',
            'qty'
        ];
    
        protected $with = [
            'unitOfMeasure',
        ];
    
        public function header()
        {
            return $this->belongsTo('PurchaseOrder');
        }
    
        public function unitOfMeasure()
        {
            return $this->hasOne('UnitOfMeasure');
        }
    }
    
    class UnitOfMeasure extends \Eloquent
    {
        protected $fillable = [
            'name'
        ];
    
        public function lineItems()
        {
            return $this->belongsToMany('PurchaseOrderDetail');
        }
    }
    

    您还需要使用正确的设置来设置迁移,如下所示:

    //migration for purchaseorder table
    public function up()
    {
        Schema::create('purchaseorders', function(Blueprint $table)
        {
            $table->increments('id');
            $table->string('subject');
            $table->string('date');
            $table->timestamps();
        });
    }
    
    //migration for purchaseorderdetail table
    public function up()
    {
        Schema::create('purchaseorderdetails', function(Blueprint $table)
        {
            $table->increments('id');
            $table->integer('purchaseorder_id')->unsigned()->index();
            $table->integer('unitofmeasure_id')->unsigned()->index();
            $table->foreign('purchaseorder_id')->references('id')->on('purchaseorders');
            $table->string('description');
            $table->float('amount');
            $table->float('qty');
            $table->timestamps();
        });
    }
    
    //migration for unitsofmeasure table
    public function up()
    {
        Schema::create('unitsofmeasure', function(Blueprint $table)
        {
            $table->increments('id');
            $table->string('name');
            $table->timestamps();
        });
    }
    

    我希望,这应该会让你非常接近你需要的东西。 :) 然后您可以像这样查询您的项目:

    $po-details = PurchaseOrderDetail::with(['purchaseOrder', 'unitOfMeasure')->find($id);
    

    这是一个过度简化的控制器方法的样子:

    class PurchaseOrderController
    {
        public function show($id)
        {
            $purchaseOrders = PurchaseOrder::with('detail')->find($id);
    
            return View::make('purchaseOrder.show', compact('purchaseOrders'));
        }
    }
    

    然后你的观点: @foreach($purchaseOrders 作为 $purchaseOrder) @foreach ($purachseOrder->detail as $lineItem) @endforeach @endforeach

    【讨论】:

    • 您能解释一下如何设置ViewController吗?提前致谢!
    • 这很快就会变得更加复杂,具体取决于您的需要。我会尝试在上面添加一个简化版本。
    • 您能解释一下如何为 CRUD 设置 VIEW 吗?谢谢。
    猜你喜欢
    • 1970-01-01
    • 2022-09-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多