2016-09-05 10 views
0

多態性の関係を保持するテーブルをクエリすることで、Laravelで基本クエリを実行しようとしています。テーブルには、App\MedicationErrorApp\PressureUlcerなどの値を保持するrecord_typeという列があります。PHP文字列の最後にバックスラッシュを追加する

`Action::where('record_type','App\MedicationError')` 

私はMedicationErrorPressureUlcerなどの文字列を含む変数のセットを持っている:

は、私がこれに似たクエリを実行します。

App\でこれらの文字列にプレフィックスを付けるにはどうすればよいですか?

自分自身が難しい理由は、'App'文字列の末尾にバックスラッシュを追加する方法を考え出すことができないためです。これは現時点で私が試みていることです:

$type = 'App\\ '.studly_case($record->type); 

しかし、それはApp\\ RiskAssessmentUpdateを返します。最後から空白を削除すると、明らかにバックスラッシュが一重引用符をエスケープします。 trim('App\\ ')も役に立ちません。

私は本当に明白な(正規表現?)解決策がここにないように感じます。どんな助けもありがとう。

+0

ダブルスラッシュを使用すると、最初のスラッシュが2番目のスラッシュをエスケープするので、 'App \\'はApp \を生成します。 –

+0

スラッシュが二重引用符で囲まれている場合は、スラッシュをエスケープする必要があります。つまり、スラッシュを一重引用符で囲んだ場合などは不要です。 '' \ '' – apokryfos

+0

@apokryfos - au contraire、一重引用符でも、特定の文字をエスケープする必要があります。 '' \ 'はそれらの[PHP Docs](http://www.php.net/manual/en/language.types.string.php#language.types.string.syntax.single)の一つです...一重引用符で囲まれた文字列の中の一重引用符( '' ')は、エスケープする必要がある別の文字です。 –

答えて

1

2つのバックスラッシュを1つの引用符で囲んだ文字列にまとめると、1つのバックスラッシュを作成する必要があります。最初のものは2番目のバックスラッシュをエスケープします。それはバックスラッシュを返すということで私の推測では、あなたの問題はあなたのコードのstudly_case($record->type)一部であるということです

$type = "App\\" . studly_case($record->type); 

$type = 'App\\' . studly_case($record->type); 

また、あなたは同じように二重引用符で囲まれた文字列を、使用することができますそれの始めに。このコードを試してみて、それが動作するかどうか確認してください:

$type = "App\\" . ltrim(studly_case($record->type), '\\'); 

これは、すべての先頭の円記号を削除する必要があります。

+0

ありがとうが、残念ながらそれは動作しませんでした。どちらの場合でも出力されたクエリに 'App \\ PressureUlcer'のような2つのバックスラッシュが含まれていた –

+0

その場合、' $ record-> type'がバックスラッシュ文字で始まらないことを確認できますか? – Jonathon

+0

これは実際に私のコードで次のように設定されています: 'DB :: raw( 'Medication Error' as type ')' –

関連する問題