SQL askdev.ru - [11534 unique mails - 2020-09-25]
by slut - April 26, 2021 at 08:07 PM
#1
4GiB
3626685 lines

link Hidden Content
You must register or login to view this content.


Spoiler
555702:(478062,'Laurence','/users/1317935/laurence','2012-09-27 17:19:11',7,0,8,1,'[{\"accepted\":true,\"author\":\"hakre\",\"authorUrl\":\"\\/users\\/367456\\/hakre\",\"date\":1503205181,\"vote\":\"0\",\"text\":\"<p>для задания вам нужно создать новую грамматику, которая будет иметь правильную строку:<\\/p>\\n\\n<p><a href=\\\"https:\\/\\/github.com\\/laravel\\/laravel\\/blob\\/4d3c68129b89c6bc8131aca765a63dba8fee92b0\\/laravel\\/database\\/query\\/grammars\\/grammar.php#L375\\\">грамматика.в PHP<\\/a> <sup>(1)<\\/sup><\\/p>\\n\\n<p>грамматика является публичным свойством <code>DB<\\/code> в данном случае <code>Database<\\/code> сохраненные подключении. Это не совсем прямо, но из видимости свойств вы должны иметь возможность вводить свою специальную грамматику в слой базы данных.<\\/p>\\n\\n<p>Я также предлагаю вам поднять этот вопрос с проектом, вероятно, у них есть лучшая идея, как сделать это более гибким для таких случаев.<\\/p>\\n\\n<hr>\\n<p><sup>(1)<\\/sup> это был бывший, к дате ссылки на ответ. Если вы видите это сегодня, вам нужно принять версию Laravel, которую вы используете, например <a href=\\\"https:\\/\\/github.com\\/laravel\\/framework\\/blob\\/4.0\\/src\\/Illuminate\\/Database\\/Query\\/Grammars\\/Grammar.php#L545\\\">грамматика.php для 4.0<\\/a>, эти классы перешли в <code>laravel\\/framework<\\/code>.<\\/p>\"},{\"accepted\":false,\"author\":\"malhal\",\"authorUrl\":\"\\/users\\/259521\\/malhal\",\"date\":1408887814,\"vote\":\"10\",\"text\":\"<p>попробуйте эту магию, в вашей модели:<\\/p>\\n\\n<pre><code>public static function insertIgnore($array){\\n    $a = new static();\\n    if($a-&gt;timestamps){\\n        $now = \\\\Carbon\\\\Carbon::now();\\n        $array[\'created_at\'] = $now;\\n        $array[\'updated_at\'] = $now;\\n    }\\n    DB::insert(\'INSERT IGNORE INTO \'.$a-&gt;table.\' (\'.implode(\',\',array_keys($array)).\\n        \') values (?\'.str_repeat(\',?\',count($array) - 1).\')\',array_values($array));\\n}\\n<\\/code><\\/pre>\\n\\n<p>используйте так:<\\/p>\\n\\n<pre><code>Shop::insertIgnore(array(\'name\' =&gt; \'myshop\'));\\n<\\/code><\\/pre>\\n\\n<p>это отличный способ предотвратить нарушения ограничений, которые могут возникнуть с firstOrCreate в многопользовательской среде, если это свойство \\\"name\\\" было уникальным ключом.<\\/p>\"},{\"accepted\":false,\"author\":\"J. Bruni\",\"authorUrl\":\"\\/users\\/370290\\/j-bruni\",\"date\":1500317930,\"vote\":\"4\",\"text\":\"<p>Я не мог обезьянничать патч, как предлагалось в ответе Растислава.<\\/p>\\n\\n<p>вот что сработало для меня:<\\/p>\\n\\n<ol>\\n<li><p>переопределить <code>compileInsert<\\/code> метод в классе грамматики пользовательского запроса, который расширяет класс MySqlGrammar платформы.<\\/p><\\/li>\\n<li><p>используйте экземпляр этого пользовательского класса грамматики, вызвав <code>setQueryGrammar<\\/code> метод из экземпляра подключения к БД.<\\/p><\\/li>\\n<\\/ol>\\n<p>Итак, код класса выглядит так:<\\/p>\\n\\n<pre><code>&lt;?php\\n\\nnamespace My\\\\Namespace;\\n\\nuse Illuminate\\\\Database\\\\Query\\\\Builder;\\nuse Illuminate\\\\Database\\\\Query\\\\Grammars\\\\MySqlGrammar;\\n\\n\\/**\\n * Changes \\\"INSERT\\\" to \\\"INSERT IGNORE\\\"\\n *\\/\\nclass CustomMySqlGrammar extends MySqlGrammar\\n{\\n    \\/**\\n    * Compile an insert statement into SQL.\\n
*\\n    * @param  \\\\Illuminate\\\\Database\\\\Query\\\\Builder  $query\\n    * @param  array  $values\\n    * @return string\\n    *\\/\\n    public function compileInsert(Builder $query, array $values)\\n    {\\n        \\/\\/ Essentially we will force every insert to be treated as a batch insert which\\n        \\/\\/ simply makes creating the SQL easier for us since we can utilize the same\\n        \\/\\/ basic routine regardless of an amount of records given to us to insert.\\n        $table = $this-&gt;wrapTable($query-&gt;from);\\n\\n        if (! is_array(reset($values))) {\\n            $values = [$values];\\n        }\\n\\n        $columns = $this-&gt;columnize(array_keys(reset($values)));\\n\\n        \\/\\/ We need to build a list of parameter place-holders of values that are bound\\n        \\/\\/ to the query. Each insert should have the exact same amount of parameter\\n        \\/\\/ bindings so we will loop through the record and parameterize them all.\\n        $parameters = collect($values)-&gt;map(function ($record) {\\n            return \'(\'.$this-&gt;parameterize($record).\')\';\\n        })-&gt;implode(\', \');\\n\\n        return \\\"insert ignore into $table ($columns) values $parameters\\\";\\n    }\\n}\\n<\\/code><\\/pre>\\n\\n<p>I скопировал <code>compileInsert<\\/code> метод из класса фреймворка, а затем, внутри метода, я только изменил <code>insert<\\/code> to <code>insert ignore<\\/code>. Все остальное осталось прежним.<\\/p>\\n\\n<p>затем, в определенном месте кода, в приложении (запланированная задача), где мне нужно было \\\"вставить игнорировать\\\", я просто сделал следующее:<\\/p>\\n\\n<pre><code>&lt;?php\\n\\nuse DB;\\nuse My\\\\Namespace\\\\CustomMySqlGrammar;\\n\\nclass SomeClass\\n{\\n    public function someMethod()\\n    {\\n        \\/\\/ Changes \\\"INSERT\\\" to \\\"INSERT IGNORE\\\"\\n        DB::connection()-&gt;setQueryGrammar(new CustomMySqlGrammar());\\n\\n        \\/\\/ et cetera... for example:\\n        ModelClass::insert($data);\\n    }\\n}\\n<\\/code><\\/pre>\"},{\"accepted\":false,\"author\":\"Rastislav Molnar\",\"authorUrl\":\"\\/users\\/4892852\\/rastislav-molnar\",\"date\":1471363753,\"vote\":\"1\",\"text\":\"<p>не уверен, что полезно для кого-либо, но недавно я адаптировал подход Хакра к Laravel 5:<\\/p>\\n\\n<p>вы должны изменить следующие 3 файла, чтобы ваша вставка игнорировала работу:<\\/p>\\n\\n<ol>\\n<li><p>В Builder.на PHP (поставщика\\/фреймворк Laravel\\/рамках\\/в src\\/освещения\\/базы данных\\/запрос\\/Строитель.php) вы должны клонировать функцию insert, с изменением имени на insertIgnore и изменением функции вызова грамматики на:<code>$sql = $this-&gt;grammar-&gt;compileInsertIgnore($this, $values)Wink<\\/code><\\/p><\\/li>\\n<li><p>В Грамматике.РНР (поставщик \\/ laravel \\/ framework\\/src\\/illuminate\\/база данных\\/запрос\\/грамматика \\/ грамматика.php) вы должны клонировать функцию compileInsert и переименовать ее в compileInsertIgnore, где вы измените return на:<code>return \\\"insert ignore into $table ($columns) values $parameters\\\";<\\/code><\\/p><\\/li>\\n<li><p>В Подключения.на PHP (поставщика\\/фреймворк Laravel\\/рамках\\/в src\\/освещения\\/базы данных\\/связи.php) вы должны просто клонировать функцию insert и переименовать ее в insertIgnore<\\/p><\\/li>\\n<\\/ol>\\n<p>теперь
вы должны быть сделаны, соединение может распознать функцию insertIgnore, builder может указать его на правильную грамматику, а грамматика включает в себя \\\"игнорировать\\\" в заявлении. Пожалуйста, это не работает хорошо для MySQL, может быть не так гладко для других баз данных.<\\/p>\"},{\"accepted\":false,\"author\":\"Marco Pedraza\",\"authorUrl\":\"\\/users\\/6028975\\/marco-pedraza\",\"date\":1478055196,\"vote\":\"1\",\"text\":\"<p>добавьте метод insertIgnore в вашу модель<\\/p>\\n\\n<pre><code>&lt;?php\\n\\nnamespace App;\\n\\nuse Illuminate\\\\Auth\\\\Authenticatable;\\nuse Illuminate\\\\Database\\\\Eloquent\\\\Model;\\nuse Illuminate\\\\Auth\\\\Passwords\\\\CanResetPassword;\\nuse Illuminate\\\\Foundation\\\\Auth\\\\Access\\\\Authorizable;\\nuse Illuminate\\\\Contracts\\\\Auth\\\\Authenticatable as AuthenticatableContract;\\nuse Illuminate\\\\Contracts\\\\Auth\\\\Access\\\\Authorizable as AuthorizableContract;\\nuse Illuminate\\\\Contracts\\\\Auth\\\\CanResetPassword as CanResetPasswordContract;\\n\\nclass User extends Model implements AuthenticatableContract,\\n                                    AuthorizableContract,\\n                                    CanResetPasswordContract\\n{\\n    use Authenticatable, Authorizable, CanResetPassword;\\n\\n    \\/**\\n    * The database table used by the model.\\n    *\\n    * @var string\\n    *\\/\\n    protected $table = \'users\';\\n\\n    \\/**\\n    * The attributes that are mass assignable.\\n    *\\n    * @var array\\n    *\\/\\n    protected $fillable = [\'name\', \'email\', \'password\'];\\n\\n    \\/**\\n    * The attributes excluded from the model\'s JSON form.\\n    *\\n    * @var array\\n    *\\/\\n    protected $hidden = [\'password\', \'remember_token\'];\\n\\n\\n    public static function insertIgnore(array $attributes = [])\\n    {\\n        $model = new static($attributes);\\n\\n        if
($model-&gt;usesTimestamps()) {\\n            $model-&gt;updateTimestamps();\\n        }\\n\\n        $attributes = $model-&gt;getAttributes();\\n\\n        $query = $model-&gt;newBaseQueryBuilder();\\n        $processor = $query-&gt;getProcessor();\\n        $grammar = $query-&gt;getGrammar();\\n\\n        $table = $grammar-&gt;wrapTable($model-&gt;getTable());\\n        $keyName = $model-&gt;getKeyName();\\n        $columns = $grammar-&gt;columnize(array_keys($attributes));\\n        $values = $grammar-&gt;parameterize($attributes);\\n\\n        $sql = \\\"insert ignore into {$table} ({$columns}) values ({$values})\\\";\\n\\n        $id = $processor-&gt;processInsertGetId($query, $sql, array_values($attributes));\\n\\n        $model-&gt;setAttribute($keyName, $id);\\n\\n        return $model;\\n    }\\n}\\n<\\/code><\\/pre>\\n\\n<p>вы можете использовать:<\\/p>\\n\\n<pre><code>App\\\\User::insertIgnore([\\n    \'name\' =&gt; \'Marco Pedraza\',\\n    \'email\' =&gt; \'[email protected]\'\\n]);\\n<\\/code><\\/pre>\\n\\n<p>следующий запрос будет выполнен:<\\/p>\\n\\n<pre><code>insert ignore into users (name, email, updated_at, created_at) values (?, ?, ?, ?)\\n<\\/code><\\/pre>\\n\\n<p>этот метод автоматически добавляет \\/ удаляет красноречивые метки времени, если вы включили или отключили.<\\/p>\"},{\"accepted\":false,\"author\":\"Aammad Ullah\",\"authorUrl\":\"\\/users\\/5534480\\/aammad-ullah\",\"date\":1525928713,\"vote\":\"0\",\"text\":\"<p>Я наконец нашел этот <a href=\\\"https:\\/\\/github.com\\/yadakhov\\/insert-on-duplicate-key\\\">https:\\/\\/github.com\\/yadakhov\\/insert-on-duplicate-key<\\/a> который помог мне много<\\/p>\\n\\n<p>пользователь:: insertIgnore ($users); \\nэто метод, который я использую, давая ему массив строк и его возвращая выполненные строки<\\/p>\\n\\n<p>установите его через composer: composer require yadakhov \\/ insert-on-duplicate-key<\\/p>\"},{\"accepted\":false,\"author\":\"Ryan\",\"authorUrl\":\"\\/users\\/470749\\/ryan\",\"date\":1532031265,\"vote\":\"0\",\"text\":\"<h2> обновленный ответ для Laravel Eloquent в 2018<\\/h2>\\n\\n<p>Это также обрабатывает несколько одновременных вставок (вместо одной записи за раз).<\\/p>\\n\\n<p>либо поместите это в класс вашей модели, либо в класс BaseModel, который ваша модель расширяет:<\\/p>\\n\\n<pre><code>\\/**\\n * @see https:\\/\\/stackoverflow.com\\/a\\/25472319\\/470749\\n * \\n * @param array $arrayOfArrays\\n * @return bool\\n *\\/\\npublic static function insertIgnore($arrayOfArrays) {\\n    $static = new static();\\n    $table = with(new static)-&gt;getTable(); \\/\\/https:\\/\\/github.com\\/laravel\\/framework\\/issues\\/1436#issuecomment-28985630\\n    $questionMarks = \'\';\\n    $values = [];\\n    foreach ($arrayOfArrays as $k =&gt; $array) {\\n        if ($static-&gt;timestamps) {\\n            $now = \\\\Carbon\\\\Carbon::now();\\n            $arrayOfArrays[$k][\'created_at\'] = $now;\\n            $arrayOfArrays[$k][\'updated_at\'] = $now;\\n            if ($k &gt; 0) {\\n                $questionMarks .= \',\';\\n            }\\n            $questionMarks .= \'(?\' . str_repeat(\',?\', count($array) - 1) . \')\';\\n            $values = array_merge($values, array_values($array));\\n        }\\n    }\\n    $query = \'INSERT IGNORE INTO \' . $table . \' (\' . implode(\',\', array_keys($array)) . \') VALUES \' . $questionMarks;\\n    return DB::insert($query, $values);\\n}\\n<\\/code><\\/pre>\\n\\n<p>используйте так:<\\/p>\\n\\n<p><code>Shop::insertIgnore([[\'name\' =&gt; \'myShop\'], [\'name\' =&gt; \'otherShop\']]);<\\/code><\\/p>\"},{\"accepted\":false,\"author\":\"wesside\",\"authorUrl\":\"\\/users\\/150774\\/wesside\",\"date\":1348752711,\"vote\":\"-13\",\"text\":\"<pre><code>$your_array = array(\'column\' =&gt; \'value\', \'second_column\' =&gt; \'value\');\\n\\nDB::table(\'your_table\')-&gt;insert($your_array);\\n<\\/code><\\/pre>\\n\\n<p>имейте в виду, я не знаю, откуда берутся ваши данные, но вы всегда должны их дезинфицировать.  Если у вас есть более одной записи, просто повторите ее в цикле.<\\/p>\\n\\n<p>насколько <code>INSERT IGNORE<\\/code> найти <code>INSERT<\\/code> метод в библиотеке fluent создайте новый метод insert_ignore точно так же, как insert, и просто измените его с помощью <code>IGNORE<\\/code>.<\\/p>\"}]','12622341',1,0,1,0,1,'2019-03-29 20:01:47','2019-04-02 18:13:46','Вставить игнорировать, используя беглый Laravel','a:3:{i:0;s:3:\"php\";i:1;s:5:\"mysql\";i:2;s:7:\"laravel\";}','<p>есть ли быстрый способ изменить SQL-запрос, сгенерированный <a href=\"http://laravel.com/docs/database/fluent\">фреймворк Laravel свободно</a> иметь <code>INSERT IGNORE</code> вместо <code>INSERT</code>?</p>\n\n<p>Я пытаюсь вставить массив с 50 элементами и записать весь запрос вручную, раздует код и сделает его более восприимчивым к человеческим ошибкам.</p>','null','https://stackoverflow.com/questions/12622341/insert-ignore-using-laravels-fluent'),
Reply
#2
Nice, going to my collection (even though i don't know how to use it lol)
Reply
#3
Thanks, but how I can download all website code or not I can?
Reply

Possibly Related Threads…
Thread Author Replies Views Last Post
TXT German Mails 120K Leaked from SQLI App 0 416 Yesterday at 02:30 PM
Last Post: App
Taiwan estate agency Member data - 9,853 Unique Records andyleung0927 19 5,217 April 20, 2021 at 01:33 PM
Last Post: Burpingjimmy_Bot
Mails from free.navalny.com Underground 11 1,925 April 20, 2021 at 07:31 AM
Last Post: Underground

 Users browsing this thread: 2 Guest(s)