suchen

Heim  >  Fragen und Antworten  >  Hauptteil

So verwenden Sie benutzerdefinierte Felder in der polymorphen Laravel-ORM-Assoziation

Es gibt drei Tabellen wie folgt

Geschäft:

id Besitzercode owner_type
1 WSWJDIXSWS Unternehmen
2 ADSOOEKL23 persönlich

Unternehmen:

id Code Name
1 WSWJDIXSWS ibm
2 SDFSDFSDFS h3c

presonal:

id Code Name
1 ADSOOEKL23 Jack
2 SDFSDFSDFS braun

Entsprechendes Modell

Modellunternehmen:

    class Company extends Model
    {
        public function business() {
            return $this->morphMany('App\Models\Business', 'owner');
        }
    }

Model persönlich:

    class Personal extends Model
    
        {
            public function business() {
                return $this->morphMany('App\Models\Business', 'owner');
            }
        }

Modellgeschäft:

    class Business extends Model
    {
    
        public function owner(){
            //return $this->morphTo();
            return $this->morphTo('owner', 'owner_type', 'owner_code');
        }
    }

IndexController:

    class IndexController extends Controller
    {
        public function index(){
            //DB::connection()->enableQueryLog();
            //$queries = DB::getQueryLog();
            $businesses = Business::get();
            $businesses->load('owner');
    
            return view('index')->with(compact('businesses'));
    
        }
    }

view:index.blade

    <table bgcolor="#7fffd4"  width="400">
        <tr>
            <td colspan="3" bgcolor="#f5f5dc" align="center">BUSINESS</td>
        </tr>
        <tr>
            <td bgcolor="#f0f8ff">ID</td>
            <td bgcolor="#f0f8ff">OWNER_TYPE</td>
            <td bgcolor="#f0f8ff">NAME</td>
        </tr>
        @foreach($businesses as $business)
        <tr>
            <td bgcolor="#f0f8ff">{{$business->id}}</td>
            <td bgcolor="#f0f8ff">{{$business->owner_type}}</td>
            <td bgcolor="#f0f8ff">{{object_get($business->owner, 'name', 'unfind')}}</td>
        </tr>
        @endforeach
    </table>

Die Ergebnisse nach der Ausführung sind alle unauffindbar!

Debugger-Komponente verwenden
Die ausgeführte Anweisung lautet wie folgt:

select * from `businesses`
select * from `companies` where `companies`.`id` in ('')
select * from `personals` where `personals`.`id` in ('')

Die Dokumentation von Laravel verwendet etwas Ähnliches, „owner_typeowner_id“, aber es wird nicht erwähnt, wie man Felder selbst definiert.
Ich habe lange gekämpft, bitte erklären Sie es mir, ich wäre Ihnen sehr dankbar

曾经蜡笔没有小新曾经蜡笔没有小新2811 Tage vor611

Antworte allen(1)Ich werde antworten

  • ringa_lee

    ringa_lee2017-05-16 16:49:59

    多看文档多实践多用智能IDE。morphMany有5个参数。

    Ps.以后注意一下排版。

    Antwort
    0
  • StornierenAntwort