2016-12-17 7 views
0

Ich bin neu in Laravel und damit bin zu kämpfen:Laravel 5.3 Eloquent Modell Beziehung nicht funktioniert, gibt NULL

Datenbank - MSSQL bestehenden DB-Schema nicht geändert werden kann als andere Software davon abhängt. (Nicht sicher, ob dies ein Problem oder nicht)

Modell/Tischaufbau: INFO_ALL Tabelle - ID ist Primärschlüssel PERSON Tabelle - ID foriegn Schlüssel ist

IDs Hex-Werte sind und ich merke, eloquent entfernt die 0x vom Anfang des Wertes und bin nicht sicher, ob dies die Beziehung zum Scheitern bringt oder nicht. Beispiel: In der DB I 0x123456789 in meiner zurück eloquent Daten sehen Ich sehe 123456789

Person Modell:

<?php 

namespace App; 

use Illuminate\Database\Eloquent\Model; 

class Person extends Model 
{ 
protected $table = 'PERSON'; 
protected $primaryKey = 'ID'; 
public $incrementing = false; 
public $timestamps = false; 

    public function info_all(){ 

     return $this->belongsTo(Info_All::class, 'ID', 'ID'); 
     } 
} 

Info Modell:

<?php 

namespace App; 

use Illuminate\Database\Eloquent\Model; 

class Info_All extends Model 
{ 
protected $table = 'INFO_ALL'; 
protected $primaryKey = 'ID'; 
public $incrementing = false; 
public $timestamps = false; 

    public function person(){ 

     return $this->hasOne(Person::class, 'ID', 'ID'); 

    } 
} 

Wie kann ich die Beziehung mich entschieden:

php artisan tinker 
$person = App\Person::first(); 
$person->info; 
NULL 

php artisan tinker 
$info= App\Info::first(); 
$info->person; 
NULL 

Ich weiß, dass diese Beziehung in der Datenbank existiert und ich kann sie manuell zusammen w Bei einer Abfrage wäre das Beziehungsfeature dieses Frameworks aber wirklich gut zu verstehen.

Beinahe neu bei Laravel gibt es ein paar Dinge, über die ich mir nicht sicher bin, wie wenn das dritte Argument in der Beziehung notwendig ist, da ich den $ primaryKey deklariere. Ich habe den $ primarykey im ersten Modell deklariert, weil ich angenommen habe, dass es eine Groß- und Kleinschreibung ist, und meine Tabelle hat ID nicht ID. Davon abgesehen bin ich seit ein paar Tagen festgefahren und habe das Gefühl, alles in jeder Kombination getestet zu haben.

Jede Hilfe wird geschätzt.

Antwort

0

Ihre Beziehung ist falsch definiert. Versuchen Sie durch Hinzufügen folgende Beziehung:

Person Modell

public function info() 
{ 
    return $this->hasOne(Info_All::class, 'ID', 'ID'); 
} 

INFO_ALL Modell

public function person() 
{ 
    return $this->belongsTo(Person::class, 'ID', 'ID'); 
} 

es dann ausprobieren in Kesselflicker:

$person = App\Person::first(); 
$person->info; 

Ich bin nicht sicher, aber wenn eloquent entfernt die 0x vom Anfang des Wertes kann dann auch das Problem verursachen.

Versuchen Sie, indem Sie 0x aus Ihren Tabellen entfernen.

+0

Es gibt mehr IDs in der Infotabelle als die Personentabelle. Info kann existieren (Benutzername und Privilegien) ohne eine Person (Bild, Name Adresse). Es ist ein wenig seltsam, aber es ist eine vorhandene Datenbank mit einer Abhängigkeit von vorhandener Software, die ich versuche, Funktionen mit einer Web-App hinzuzufügen. Also glaube ich, dass meine Beziehung korrekt ist. Die tatsächlichen Tabellennamen sind anscheinend zufällige Namen, also ändere ich sie in den Fragen in Person und Info, um es einfacher zu lesen, aber ich habe es vielleicht ein wenig confusuing gemacht. – vanamp

+0

Wenn eine Tabelle eine FK hat, dann müssen Sie in Relation eine Methode 'goesTo' definieren. Bitte lesen Sie die [Dokumente] (https://laravel.com/docs/5.3/eloquent-relationships#one-to-one) für weitere Informationen. –

+0

Ja, meine Beschreibung der Tabelle ist falsch, aber der Code hatte die richtigen Beziehungsinformationen. Info hasOne – vanamp

Verwandte Themen