Comment utiliser les champs personnalisés dans l'association polymorphe Laravel Orm
曾经蜡笔没有小新
曾经蜡笔没有小新 2017-05-16 16:47:59
0
1
595

Il y a trois tableaux comme suit

entreprise :

id owner_code owner_type
1 WSWJDIXSWS entreprise
2 ADSOOEKL23 personnel

entreprise :

id code nom
1 WSWJDIXSWS ibm
2 SDFSDFSDFS h3c

presonal :

id code nom
1 ADSOOEKL23 jack
2 SDFSDFSDFS marron

Modèle correspondant

Entreprise modèle :

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

Modèle personnel :

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

Entreprise modèle :

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

Contrôleur d'index :

    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'));
    
        }
    }

vue : 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>

Les résultats après exécution sont tous introuvables !

Utiliser le composant du débogueur
L'instruction exécutée est la suivante :

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

La documentation de Laravel utilise quelque chose de similaire,owner_typeowner_id, mais elle ne mentionne pas comment définir les champs par vous-même
J'ai du mal depuis longtemps, veuillez expliquer, je vous serais très reconnaissant

曾经蜡笔没有小新
曾经蜡笔没有小新

répondre à tous(1)
左手右手慢动作

Lisez plus de documentation, entraînez-vous davantage et utilisez l'IDE intelligent. morphManyIl y a 5 paramètres.

Ps. Faites plus attention à la mise en page à l'avenir.

Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal