Help us understand the problem. What is going on with this article?

【備忘録】Eloquentモデルの名前空間が他の階層で重複している時("Cannot declare class 〜, because the name is already in use")

クラス名重複してるよ〜のエラーメッセージが出る場合...

①対処法

1:本当に記述している文字列が正しいか確認する
2:namespaceの階層が正しいか確認する(\App\Models\temp...)
3:asで別名を付与(詳細は以下参照)

②それ以外の場合 とは?

あまり多くないパターンだと思いますが、自分が修正を担当しているプロジェクトのModelsの階層がこんな感じでした。

\APP
 \temp.php(フルパス:\APP\temp.php)

 \Models
  \temp.php(フルパス:\APP\Models\temp.php)

最初見た時、Laravelはこんなふうになってるのかーと思って特に気にしませんでした。
(Eloquentモデルと通常のModelなので役割はそもそも違います)
が、後々機能を追加するとなったときになって困りました。

use APP\Model\Temp
use APP\Temp

Cannot declare class〜〜〜〜, because the name is already in use

これはNGなんですね...。
記述や文字列の誤りがない、階層が違う、としても同名だとそもそもインポートNGのようです。

use APP\Model\Temp
use APP\Temp as eloquent_temp

こんな感じに別名であれば解決します。
なので正確には同名クラスからのインポートがNGというわけではないです。

※そもそも3のパターンは命名の時点でおかしいので、Eloquentモデルの作成時にはmodelと同名にするべきではないです!

kmmns
某感染症の影響でJava→PHPメインの業務になったため勉強中です。 業務などに活かせる便利な仕組みなど共有したいと思ってます。
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした