Domanda

Ho un modello User e un modello Organization che sto cercando di relazionarsi l'un l'altro.

La tabella users ha i campi id e current_organization_id (tasto estraneo) (tra gli altri campi normali).

La tabella organizations ha i campi id e owner_id (tasto estraneo) (insieme ad alcuni altri campi dati).

C'è anche un tavolo per pivot, organization_user che collega i due tramite il loro rispettivo id.

I miei modelli sono impostati come questo:

Utente:

<?php

use Illuminate\Auth\UserTrait;
use Illuminate\Auth\UserInterface;
use Illuminate\Auth\Reminders\RemindableTrait;
use Illuminate\Auth\Reminders\RemindableInterface;

class User extends \Cartalyst\Sentry\Users\Eloquent\User implements UserInterface, RemindableInterface {

  use UserTrait, RemindableTrait;

  /**
   * The database table used by the model.
   *
   * @var string
   */
  protected $table = 'users';

  /**
   * The attributes excluded from the model's JSON form.
   *
   * @var array
   */
  protected $hidden = array('password', 'remember_token');

  /**
   * Defining many to many relationship to organizations
   */
  public function organizations()
  {
    return $this->belongsToMany('Organization');
  }

  /**
   * Defining relationship to current selected organization
   */
  public function current_organization()
  {
    return $this->hasOne('Organization');
  }

}
.

Organizzazione:

<?php

class Organization extends \Eloquent {

    // Add your validation rules here
    public static $rules = [
        // 'title' => 'required'
    ];

    // Don't forget to fill this array
    protected $fillable = [];

  public function users()
  {
    return $this->hasMany('User');
  }

  public function owner()
  {
    return $this->belongsTo('User');
  }
}
.

L'idea è che un'unica organizzazione è di proprietà di un utente, ma un'organizzazione ha molti utenti e ogni utente ha un'organizzazione "corrente", che possono selezionare da qualsiasi organizzazione a cui appartengono.

Il problema che sto entrando è che quando provo a fare $user->current_organization->id ottengo un errore Trying to get property of non-object, e se provo $user->current_organization()->id; ottengo un errore Undefined property: Illuminate\Database\Eloquent\Relations\HasOne::$id.

Qualche idea su cosa sto facendo male che non riesco a recuperare il current_organization come sto cercando di fare sopra?

Modifica:

Sto pensando che ha a che fare con la mia relazione hasOne, ma ho provato a farlo:

public function current_organization()
{
  return $this->hasOne('Organization', 'id', 'current_organization_id');
}
.

e ancora niente. $user->current_organization; sta tornando NULL.

È stato utile?

Soluzione 2

Dopo tanto debug e ricerca, mi sono imbattuto in Questo post che mi ha portatoal vero problema - il sottolineatura nel nome della funzione.

Dal collegamento:

.

I documenti eloquenti menzionano "Tieni presente che i metodi dovrebbero seguire Cammello-involucro, anche se le colonne del database sono casi di serpente. "Così io Credi che il nome della funzione dovrebbe essere "ObjectMinor ()".Eloquente in realtà converte i nomi delle colonne del custodia del serpente in custodia del cammello per il nomi dei metodi.Questo è un po 'confuso, ma lo fa per conformarsi Convenzioni di denominazione PHP.

Quindi, usando la risposta @cryode e quanto sopra, sono venuto con:

public function currentOrganization()
{
  return $this->belongsTo('Organization', 'current_organization_id');
}
.

che può essere chiamato tramite:

$organization = $user->current_organization;
.

Penso che dovrebbero davvero renderlo più ovvio.

Altri suggerimenti

Vuoi utilizzare una relazione belongsTo per l'organizzazione corrente.

public function current_organization()
{
    return $this->belongsTo('Organization', 'current_organization_id');
}
.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top