相关疑难解决方法(0)

如何使用eloquent/fluent从单个查询中插入多行

我有以下查询:

  $query = UserSubject::where('user_id', Auth::id())->select('subject_id')->get();
Run Code Online (Sandbox Code Playgroud)

正如预期的那样,我得到以下结果:

[{"user_id":8,"subject_id":9},{"user_id":8,"subject_id":2}]
Run Code Online (Sandbox Code Playgroud)

有没有办法将上面的结果复制到另一个表中,以便我的表看起来像这样?

ID|user_id|subject_id
1 |8      |9
2 |8      |2
Run Code Online (Sandbox Code Playgroud)

$query遇到的问题是可以预期任意数量的行,因此我不确定如何遍历未知数量的行.

php sql laravel eloquent

109
推荐指数
3
解决办法
14万
查看次数

Laravel/Eloquent内存泄漏重复检索相同的记录

我正在尝试编写一个laravel函数,它从一个数据库中获取大量记录(100,000+)并将其放入另一个数据库中.为此,我需要查询我的数据库,看看用户是否已经存在.我反复调用这段代码:

$users = User::where('id', '=', 2)->first();
Run Code Online (Sandbox Code Playgroud)

然后在那之后发生几百次,我的内存耗尽.所以,我做了一个极简主义的例子,它耗尽了所有可用的内存,它看起来像这样:

<?php

use Illuminate\Console\Command;

class memoryleak extends Command
{
    protected $name = 'command:memoryleak';
    protected $description = 'Demonstrates memory leak.';

    public function fire()
    {
        ini_set("memory_limit","12M");

        for ($i = 0; $i < 100000; $i++)
        {
            var_dump(memory_get_usage());
            $this->external_function();
        }
    }

    function external_function()
    {
        // Next line causes memory leak - comment out to compare to normal behavior
        $users = User::where('id', '=', 2)->first();

        unset($users);
        // User goes out of scope at the end of this function
    }
} …
Run Code Online (Sandbox Code Playgroud)

laravel laravel-4

18
推荐指数
1
解决办法
1万
查看次数

如何使用Laravel 4.2在单个查询中进行批量插入或更新(而不是for循环查询)

$cardQueryList = [];
foreach($cards as $cardName => $quantity) {
    $cardQueryList[] = [
        'username' => $user->username,
        'card_uid' => $card->uid,
        'have_quantity' => $quantity
    ];
}

Collection::insert($cardQueryList);
Run Code Online (Sandbox Code Playgroud)

即使行存在,上面的代码也会创建新行.如果行存在,我该怎么做才会更新.如果没有它会创建行?一个雄辩或流利的答案将是最佳的,但如果没有别的办法,我会对原始开放.

我想用单个查询进行批量更新/插入.不是每个记录的for循环查询.理想情况下,出于显而易见的原因,我想打一次数据库.

我也已经检查了以下链接:

如果不存在则插入新记录,如果存在则更新,laravel eloquent

以上工作适用于单个记录更新/插入.如果我使用for循环运行会非常慢.我正在寻找一个允许在单个查询中进行批量插入/更新的答案.

注意:我正在使用'username'和'card_uid'作为我的密钥.所以基本上当我找到一个带有所述用户名和card_uid的行时,我想更新相应的行.否则创建一个新行.

php mysql fluent laravel eloquent

14
推荐指数
2
解决办法
1729
查看次数

在laravel eloquent创建中保存多个记录

我正试图通过保存多个记录

AppSettings::create(
    [
        'name'=>'mail_host',
        'type'=>$emailsettingstype->id,
        'value'=>'',

    ],
    [
        'name'=>'mail_port',
        'type'=>$emailsettingstype->id,
        'value'=>'',

    ],
    [
        'name'=>'mail_username',
        'type'=>$emailsettingstype->id,
        'value'=>'',
    ],
);
Run Code Online (Sandbox Code Playgroud)

但是从上面开始,只创建了第一个数组.我哪里错了?任何帮助表示赞赏.

php laravel

8
推荐指数
4
解决办法
8175
查看次数

使用Laravel一次插入多个记录

我将数据逐个插入行,但我听说过,如果要插入许多数据,需要很多时间.那么一次插入它们的方法是什么?

public function add(Request $request)
{
    if ($request->ajax()) {
        $books = $request->books;
        foreach ($books as $book) {
            if (!empty($book)) {
                $add = new Book;
                $add->name = $book;
                $add->user_id = Auth::user()->id;
                $add->save();
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

php laravel

5
推荐指数
3
解决办法
2万
查看次数

PHP批量插入foreach

我有一个 curl 脚本,它从远程源读取数据。以下是当前代码:

function download_page($path){
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL,$path);
    curl_setopt($ch, CURLOPT_FAILONERROR,1);
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION,1);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
    curl_setopt($ch, CURLOPT_TIMEOUT, 15);
    $retValue = curl_exec($ch);                      
    curl_close($ch);
    return $retValue;
}
$sXML = download_page('http://remotepage.php&function=getItems&count=100&page=1');
$oXML = new SimpleXMLElement($sXML);
foreach($oXML->results->item->item as $oEntry){
    $insert_query = mysql_query("INSERT INTO tbl_item (first_name, last_name, date_added) VALUES ('" . $oEntry->firstname . "', '" . $oEntry->lastname . "', '" . date("Y-m-d H:i:s") . "')");
}
Run Code Online (Sandbox Code Playgroud)

然而,正如我想象的那样,该脚本的插入速度非常慢,因为它编写了每个单独的记录。count 变量是为每个页面返回的记录数,而 page 变量是一个简单的页面计数器。

我想知道是否有办法执行批量插入语句来一次插入所有 100 条记录。

提前致谢。

php mysql

4
推荐指数
1
解决办法
1万
查看次数

Foreach()和每个()内存耗尽,分块无法正常工作

我正在编写一个工匠控制台命令,它循环遍历表中的所有记录并重新生成该表上的字段.

该字段是a hash并且生成为md5()特定字符串的一个.

最初我的代码看起来像这样:

// Get all recipes
$recipes = Recipe::all();

$hashProgress = $this->output->createProgressBar(count($recipes));

// Loop over each recipe and generate a new hash for it
foreach ($recipes as $recipe)
{
    $hashString = '';

    $hashString .= $recipe->field1;
    $hashString .= $recipe->field2;
    $hashString .= $recipe->field3;
    $hashString .= $recipe->field4;
    $hashString .= $recipe->field5;
    $hashString .= $recipe->field6;
    $hashString .= $recipe->field7;

    $extras1Total = $recipe->extras1->sum('amount');
    $hashString .= $recipe->extras1->reduce(function ($str, $item) use ($extras1Total) {
        return $str . $item->name . ($extras1Total == 0 ? $item->amount : …
Run Code Online (Sandbox Code Playgroud)

php memory-optimization laravel eloquent laravel-5

2
推荐指数
1
解决办法
1104
查看次数

在 Laravel 中插入数据的最快方法

我制定了一种复制分支用户权限的方法。权限通常为 0 到 120 项。运行此方法将此(0 到 120)项插入到 7 个 user_ids 需要 35-55 秒才能插入到表中。

/**
 * Copy Branch User Permissions
 *
 * @param Int
 * @param Int
 * @param Int
 * @return Array
 */
public function copyBranchUserPermissions($branchIdFrom, $branchIdTo, $userId)
{
    $permissions = BranchPermissionUser::get()
        ->where('branch_id', $branchIdFrom)
        ->where('user_id', $userId);

    foreach($permissions as $permission) {
        $permission->create([
            'branch_id' => $branchIdTo,
            'permission_id' => $permission->permission_id,
            'user_id' => $userId
        ]);
    }

    return $permissions;
}
Run Code Online (Sandbox Code Playgroud)

由于插入数据的性能缓慢,我需要优化这个过程。我在想如果超过 10 个用户怎么办,所以这个过程会花太长时间。有什么办法可以提高插入数据的性能速度吗?

先感谢您!

php sql optimization laravel

1
推荐指数
1
解决办法
8419
查看次数