


Laravel 关联模型由于名称一致性导致的问题 laravel 视频教程 thinkphp php laravel
1. 定义关联模型
在Laravel里面,我们可以通过定义以下Model来完成关联查询。
class MyPost extends Eloquent { public function myPostInfo () { return $this->hasOne('MyPostInfo'); } } class MyPostInfo extends Eloquent {}
2. 使用关联模型
这里myPostInfo()
用的是Camel命名规则,但是我们在读取某一个PostInfo的时候可以用Snake规则。如下面代码都是可行的:
$post = MyPost::find(1); $post_info = $post->myPostInfo; // example 1 $post_info = $post->my_post_info; // example 2
Laravel允许上述两种方法,但是没有合理的处理使用两种命名造成的冲突。
3. 缓存失效
如果我们同时使用了上述两个例子,就会使其中一个缓存失效。在Model的relations变量中,缓存了已经读取过的关联Model,但是当我们用不同规则的名字去读取的时候,却会使得前一个缓存失效。例如
$post_info = $post->myPostInfo; // $post->relations = [‘myPostInfo’ => ..]; $post_info = $post->my_post_info; // $post->relations = [‘myPostInfo’ => …, ‘my_post_info’ => …];
所以如果不希望缓存失效,得在项目中只使用一种命名方法去读取关系模型。Laravel推荐的是Camel Case.
4. toArray() 方法失效
如果同时使用了两者,另外一个问题就是导致Model::toArray()
失效。因为toArray()
方法首先去relations
中查找Snake Case命名的关联模型,没有的话才去看Camel Case的。
所以如果用到了toArray()
方法来转换Model,切忌同时使用两者。
5. 容易犯错的位置
最容易犯错的代码是这样的:
MyPost::with(‘myPostInfo’)->get();
在使用With去eagerLoad关联模型时,必须使用和定义方法同名的key去读取,那么这样读取出来的方法只能是Camel Case的key。其他地方就只能用
$my_post->myPostInfo;
来保证不出问题。
以上就介绍了Laravel 关联模型由于名称一致性导致的问题,包括了laravel方面的内容,希望对PHP教程有兴趣的朋友有所帮助。

Outils d'IA chauds

Undresser.AI Undress
Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover
Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

Video Face Swap
Échangez les visages dans n'importe quelle vidéo sans effort grâce à notre outil d'échange de visage AI entièrement gratuit !

Article chaud

Outils chauds

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Sujets chauds

Méthode pour obtenir le code de retour lorsque l'envoi par e-mail de Laravel échoue. Lorsque vous utilisez Laravel pour développer des applications, vous rencontrez souvent des situations où vous devez envoyer des codes de vérification. Et en réalité ...

Laravel Schedule Tâche d'exécution de dépannage non réactif Lorsque vous utilisez la planification des tâches de calendrier de Laravel, de nombreux développeurs rencontreront ce problème: Schedule: Exécuter ...

La méthode de traitement de l'échec de l'e-mail de Laravel à envoyer le code de vérification est d'utiliser Laravel ...

Comment implémenter la fonction du tableau de Cliquez sur personnalisé pour ajouter des données dans DCATADMIN (Laravel-Admin) lors de l'utilisation de DCAT ...

Laravel - Dump Server - Le serveur de dump Laravel est livré avec la version de Laravel 5.7. Les versions précédentes n'incluent aucun serveur de dump. Le serveur de vidage sera une dépendance de développement dans le fichier laravel/laravel composer.

L'impact du partage des connexions redis dans Laravel Framework et sélectionnez Méthodes Lors de l'utilisation de Laravel Framework et Redis, les développeurs peuvent rencontrer un problème: grâce à la configuration ...

Connexion de la base de données des locataires personnalisés dans le package d'extension multi-locataire Laravel Stancl / location Lors de la construction d'applications multi-locataires à l'aide du package d'extension multi-locataire Laravel Stancl / location, ...

Laravel - URL d'action - Laravel 5.7 introduit une nouvelle fonctionnalité appelée « URL d'action appelable ». Cette fonctionnalité est similaire à celle de Laravel 5.6 qui accepte la méthode string in action. L'objectif principal de la nouvelle syntaxe introduite par Laravel 5.7 est de diriger
