Inhaltsverzeichnis
一对一#
Heim Backend-Entwicklung PHP-Tutorial Laravel5学生成绩管理系统-04-Eloquent关联

Laravel5学生成绩管理系统-04-Eloquent关联

Jun 23, 2016 pm 01:07 PM

     数据表之间经常会互相进行关联。例如,一篇博客文章可能会有多条评论,或是一张订单可能对应一个下单客户。Eloquent 让管理和处理这些关联变得很容易,同时也支持多种类型的关联:

一对一#

一对一关联是很基本的关联。例如一个 User 模型也许会对应一个 Phone。要定义这种关联,我们必须将 phone 方法放置于 User 模型上。phone 方法应该要返回基类 Eloquent 上的hasOne 方法的结果:

<?phpnamespace App;use Illuminate\Database\Eloquent\Model;class User extends Model{    /**     * 获取与指定用户互相关联的电话纪录。     */    public function phone()    {        return $this->hasOne('App\Phone');    }}
Nach dem Login kopieren

传到 hasOne 方法里的第一个参数是关联模型的类名称。定义好关联之后,我们就可以使用 Eloquent 的动态属性来获取关联纪录。动态属性让你能够访问关联函数,就像他们是在模型中定义的属性:

$phone = User::find(1)->phone;
Nach dem Login kopieren

Eloquent 会假设对应关联的外键名称是基于模型名称的。在这个例子里,它会自动假设 Phone模型拥有 user_id 外键。如果你想要重写这个约定,则可以传入第二个参数到 hasOne 方法里。

return $this->hasOne('App\Phone', 'foreign_key');
Nach dem Login kopieren

此外,Eloquent 的默认外键在上层模型的 id 字段会有个对应值。换句话说,Eloquent 会寻找用户的 id 字段与 Phone 模型的 user_id 字段的值相同的纪录。如果你想让关联使用 id以外的值,则可以传递第三个参数至 hasOne 方法来指定你自定义的键:

return $this->hasOne('App\Phone', 'foreign_key', 'local_key');
Nach dem Login kopieren

查看官方文档


项目实战:

创建学生成绩表grades,并建立外键user_id与用户表id关联:


因为一个用户只能对应一个成绩表,所以这是一对一模型,然后在用户模型中添加成绩关联

          <?phpnamespace App;use Illuminate\Auth\Authenticatable;use Illuminate\Database\Eloquent\Model;use Illuminate\Auth\Passwords\CanResetPassword;use Illuminate\Foundation\Auth\Access\Authorizable;use Illuminate\Contracts\Auth\Authenticatable as AuthenticatableContract;use Illuminate\Contracts\Auth\Access\Authorizable as AuthorizableContract;use Illuminate\Contracts\Auth\CanResetPassword as CanResetPasswordContract;class UsersInfo extends Model implements AuthenticatableContract,                                    AuthorizableContract,                                    CanResetPasswordContract{    use Authenticatable, Authorizable, CanResetPassword;    /**     * The database table used by the model.     *     * @var string     */    protected $table = 'users_info';    /**     * The attributes that are mass assignable.     *     * @var array     */    protected $fillable = ['name', 'email', 'is_admin', 'password','sex','phone','pro_class'];    /**     * The attributes excluded from the model's JSON form.     *     * @var array     */    protected $hidden = ['password', 'remember_token'];    /**     * 登录验证规则     * @return [type] [description]     */    protected static function rules()    {        return [            'id' => 'required|digits:10',            'password' => 'required'        ];    }    /**     * 建立一对一关系     */    public function grade()    {        return $this->hasOne('App\Grade');    }}
Nach dem Login kopieren


根据某个登陆用户,然后获取该登陆用户的成绩(联合查询):

      /** * 返回学生主页 */public function home(){    $grade = Auth::user()->grade;    return view('stu.home', compact('grade'));}
Nach dem Login kopieren


但是这里会报错

为什么会报错呢?

经过分析,查询官方文档,Eloquent 会假设对应关联的外键名称是基于模型名称的。在这个例子里,它会自动假设 Grade模型拥有 users_info_id 外键。如果你想要重写这个约定,则可以传入第二个参数到 hasOne 方法里。

      /** * 建立一对一关系 */public function grade(){   // grade表的外键为user_id    return $this->hasOne('App\Grade', 'user_id');}
Nach dem Login kopieren


查看成绩:

此外,Eloquent 的默认外键在上层模型的 id 字段会有个对应值。换句话说,Eloquent 会寻找用户的 id 字段与 Grade 模型的 user_id 字段的值相同的纪录。如果你想让关联使用 id以外的值,则可以传递第三个参数至 hasOne 方法来指定你自定义的键:

 // 这里假设user表的email和grade表的user_id为关联的字段return $this->hasOne('App\Grade', 'user_id', 'email');
Nach dem Login kopieren







Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
2 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
Repo: Wie man Teamkollegen wiederbelebt
1 Monate vor By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Abenteuer: Wie man riesige Samen bekommt
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

11 beste PHP -URL -Shortener -Skripte (kostenlos und Premium) 11 beste PHP -URL -Shortener -Skripte (kostenlos und Premium) Mar 03, 2025 am 10:49 AM

Lange URLs, die oft mit Schlüsselwörtern und Tracking -Parametern überfüllt sind, können Besucher abschrecken. Ein URL -Verkürzungsskript bietet eine Lösung, die präzise Links erstellt, die ideal für soziale Medien und andere Plattformen sind. Diese Skripte sind für einzelne Websites a wertvoll

Arbeiten mit Flash -Sitzungsdaten in Laravel Arbeiten mit Flash -Sitzungsdaten in Laravel Mar 12, 2025 pm 05:08 PM

Laravel vereinfacht die Behandlung von temporären Sitzungsdaten mithilfe seiner intuitiven Flash -Methoden. Dies ist perfekt zum Anzeigen von kurzen Nachrichten, Warnungen oder Benachrichtigungen in Ihrer Anwendung. Die Daten bestehen nur für die nachfolgende Anfrage standardmäßig: $ Anfrage-

Erstellen Sie eine React -App mit einem Laravel -Back -Ende: Teil 2, reagieren Erstellen Sie eine React -App mit einem Laravel -Back -Ende: Teil 2, reagieren Mar 04, 2025 am 09:33 AM

Dies ist der zweite und letzte Teil der Serie zum Aufbau einer Reaktionsanwendung mit einem Laravel-Back-End. Im ersten Teil der Serie haben wir eine erholsame API erstellt, die Laravel für eine grundlegende Produktlistenanwendung unter Verwendung von Laravel erstellt hat. In diesem Tutorial werden wir Dev sein

Vereinfachte HTTP -Reaktion verspottet in Laravel -Tests Vereinfachte HTTP -Reaktion verspottet in Laravel -Tests Mar 12, 2025 pm 05:09 PM

Laravel bietet eine kurze HTTP -Antwortsimulationssyntax und vereinfache HTTP -Interaktionstests. Dieser Ansatz reduziert die Code -Redundanz erheblich, während Ihre Testsimulation intuitiver wird. Die grundlegende Implementierung bietet eine Vielzahl von Verknüpfungen zum Antworttyp: Verwenden Sie Illuminate \ Support \ facades \ http; Http :: fake ([ 'Google.com' => 'Hallo Welt',, 'github.com' => ['foo' => 'bar'], 'Forge.laravel.com' =>

Curl in PHP: So verwenden Sie die PHP -Curl -Erweiterung in REST -APIs Curl in PHP: So verwenden Sie die PHP -Curl -Erweiterung in REST -APIs Mar 14, 2025 am 11:42 AM

Die PHP Client -URL -Erweiterung (CURL) ist ein leistungsstarkes Tool für Entwickler, das eine nahtlose Interaktion mit Remote -Servern und REST -APIs ermöglicht. Durch die Nutzung von Libcurl, einer angesehenen Bibliothek mit Multi-Protokoll-Dateien, erleichtert PHP Curl effiziente Execu

12 Beste PHP -Chat -Skripte auf Codecanyon 12 Beste PHP -Chat -Skripte auf Codecanyon Mar 13, 2025 pm 12:08 PM

Möchten Sie den dringlichsten Problemen Ihrer Kunden in Echtzeit und Sofortlösungen anbieten? Mit Live-Chat können Sie Echtzeitgespräche mit Kunden führen und ihre Probleme sofort lösen. Sie ermöglichen es Ihnen, Ihrem Brauch einen schnelleren Service zu bieten

Ankündigung von 2025 PHP Situation Survey Ankündigung von 2025 PHP Situation Survey Mar 03, 2025 pm 04:20 PM

Die 2025 PHP Landscape Survey untersucht die aktuellen PHP -Entwicklungstrends. Es untersucht Framework -Nutzung, Bereitstellungsmethoden und Herausforderungen, die darauf abzielen, Entwicklern und Unternehmen Einblicke zu geben. Die Umfrage erwartet das Wachstum der modernen PHP -Versio

Benachrichtigungen in Laravel Benachrichtigungen in Laravel Mar 04, 2025 am 09:22 AM

In diesem Artikel werden wir das Benachrichtigungssystem im Laravel -Web -Framework untersuchen. Mit dem Benachrichtigungssystem in Laravel können Sie Benachrichtigungen an Benutzer über verschiedene Kanäle senden. Heute werden wir diskutieren, wie Sie Benachrichtigungen OV senden können

See all articles