使用 laravel eloquent 将数据从一个表插入到另一个表

问题描述 投票:0回答:2

我有两个表,一个表的主键引用另一个表的列。我现在需要将所有主键复制到第二个表。

我有这两个型号:

class Products extends Eloquent implements UserInterface, RemindableInterface {

    use UserTrait, RemindableTrait;


    protected $connection = 'mysql3';

    protected static $_table;

    public function setTable($table)
    {
        static::$_table = $table;
    }

    public function getTable()
    {
        return static::$_table;
    }

    public function skuEAN() {

        return $this->hasOne('SkutoEAN', 'seller_sku', 'seller_sku');


    }

class SkutoEAN extends Eloquent implements UserInterface, RemindableInterface {

    use UserTrait, RemindableTrait;


    protected $connection = 'mysql3';

    protected static $_table;

    public function setTable($table)
    {
        static::$_table = $table;
    }

    public function getTable()
    {
        return static::$_table;
    }

    protected $fillable = ['seller_sku','EAN','fallback'];

    public function connectToproducts() {

        return $this->belongsTo('de_products');

    }

现在在我的控制器中,我正在这样做:

$data = Products::get(['seller_sku']);
    foreach ($data as $a) {
        $skuean = SkutoEAN::create(['seller_sku' => $a->seller_sku]);
        $skuean->save();
}

这是可行的,但复制 2500 个条目需要大约 3 分钟,这不可能是正确的。有没有办法直接用eloquent复制数据,而不需要先将数据存入内存呢?

php laravel laravel-4 eloquent
2个回答
3
投票

您可以只使用

Eloquent::insert()
。例如:

$data = array(
    array('name'=>'Coder 1', 'rep'=>'4096'),
    array('name'=>'Coder 2', 'rep'=>'2048'),
    //...
);

Coder::insert($data);

也许这个问题可以帮助你!


0
投票

可以使用laravel的 chunk 功能

Table1::chunk(200, function ($table1Data) {
    foreach ($table1Data as $record) {
        // Create and save records in table2
    }
});
© www.soinside.com 2019 - 2024. All rights reserved.