Hier meine Tabellenstrukturen sind:Warum ist mein eifriger Laden mit Fehlern "BadMethodCallException mit der Meldung‚Call to undefined Methode Illuminate Database Abfrage Builder :: Profil()"
users
id INT 10
name VARCHAR 255
email VARCHAR 255
password VARCHAR 255
remember_token VARCHAR 255
created_at TIMESTAMP
updated_at TIMESTAMP
profiles
id INT 10
user_id INT 11
address1 VARCHAR 255
address2 VARCHAR 255
city VARCHAR 255
postcode VARCHAR 255
country_id INT 11
location VARCHAR 255
created_at TIMESTAMP
updated_at TIMESTAMP
countries
id INT 10
name VARCHAR 255
currency VARCHAR 255
currency_code CHAR 3
iso2 CHAR 2
iso3 CHAR 3
locale VARCHAR 255
Das Modell App \ User .php
<?php
namespace App;
use Illuminate\Foundation\Auth\User as Authenticatable;
class User extends Authenticatable
{
/**
* The attributes that are mass assignable.
*
* @var array
*/
protected $fillable = [
'name', 'email', 'password',
];
/**
* The attributes that should be hidden for arrays.
*
* @var array
*/
protected $hidden = [
'password', 'remember_token',
];
/**
* Relating profile to user
*
* @return type
*/
public function profile()
{
return $this->hasOne('App\Profile');
}
}
Das Modell App \ profile.php
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class Profile extends Model
{
public function user()
{
return $this->belongsTo(User::class);
}
/**
* Relating country to profile
*
* @return type
*/
public function country()
{
return $this->belongsTo('App\Country' ,'country_id', 'id');
}
}
Das Modell App \ Country.php
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class Country extends Model
{
/**
* Relating profile to country
*
* @return type
*/
public function profiles()
{
return $this->hasMany('App\Profile', 'country_id');
}
}
In „php Handwerker basteln“, bekomme ich folgende Ergebnisse
$profile = App\Profile::with('user')->whereId(1)->first();
=> App\Profile {#762
id: 1,
user_id: 1,
address1: "8 Acacia Way"
address2: null,
city: "Sheffield",
postcode: "S9 7TJ",
country_id: 198,
location: null,
created_at: "2016-06-17 22:03:11",
updated_at: "2016-06-17 22:03:11",
user: App\User {#767
id: 1,
name: "David Smith",
email: "dsmith1[email protected]",
created_at: "2016-06-16 22:15:43",
updated_at: "2016-06-16 22:15:43",
},
}
$profile = App\Profile::with('country')->whereId(1)->first();
Illuminate\Database\QueryException with message 'SQLSTATE[42S22]: Column not found: 1054 Unknown column 'countries.profile_id' in 'where clause' (SQL: select * from `countries` where `countries`.`profile_id` in (1))'
$country = App\Country::with('profile')->whereId(198)->first();
BadMethodCallException with message 'Call to undefined method Illuminate\Database\Query\Builder::profile()'
Warum kann ich nicht eifrig Last Länder mit Profile oder Profile mit den Ländern? Kann mir bitte jemand erklären.
In "Land" ist der Name Ihrer Methode "Profile", aber Sie rufen "Profil" (ohne "s") –
Auf Profilmodell, da Sie "country_id" als Fremdschlüssel verwenden, müssen Sie nicht Verwenden Sie den zweiten und dritten Parameter. –
Ich habe es letzte Nacht mit App \ Country :: with ('profiles') versucht und auch das hat nicht funktioniert. Ich habe eine neue Instanz von php artisan tinker gestartet und festgestellt, dass das alles jetzt funktioniert. Irgendeine Idee, warum es vielleicht nicht funktioniert hat, als ich es das erste Mal versucht habe? – user3125602