mysql の挿入無視または重複キー更新機能が必要ですが、残念ながらlaravelsクエリビルダーはそれをサポートしていません。これを達成するためにlaravel(文法クラスまたは類似のもの)を拡張する最良の方法は何ですか?
insert の代わりに insert ignore を使用してコアを一時的に編集しましたが、正常に動作しますが、それは明らかに適切な解決策ではありません。
DatabaseManager
アイデアだけで、クラスを拡張できます。
use Illuminate\Database\DatabaseManager;
class MyDatabase extends DatabaseManager {
//... add your code
}
次に、クラスのサービスプロバイダーを作成する必要があります。http: //laravel.com/docs/ioc#service-providersをご覧ください。
すなわち
use Illuminate\Support\ServiceProvider;
class MyDatabaseServiceProvider extends ServiceProvider {
public function register()
{
$this->app->bind('mydb', function()
{
return new MyDatabase();
});
}
}
次にサービスプロバイダーconfig/app.php
を追加し、要素を開いてプロバイダーに追加します
'providers' => array(
//...
'Your\Namespase\MyDatabaseServiceProvider'
今では、次のように使用できると確信しています
$app->get('/', function () use ($app) {
$app['mydb']->table('your_table')->get(); //this will work !
} );
または、必要に応じてファサードを使用できます。最初にファサード ファイルを作成します。
class MYDB extends Facade {
protected static function getFacadeAccessor() { return 'mydb'; }
}
エイリアスを追加config/app.php
'aliases' => array(
//...
'MYDB' => 'your\namespace\Facade\MYDB',
これで、次を使用できます。
MYDB::table('your table')->get();
幸運を !