Relazione tra gli oggetti

3

Ho ottenuto i modelli Post e Category . A Post è assegnato a Category . A Category ha molti Post s. Dovrebbero essere memorizzati in un database. Ho implementato le seguenti classi per questo:

Models/Post.php :

class Post {
    /**
     * Title of the post.
     *
     * @var string
     */
    public $title;

    /**
     * The category that is assigned to the post.
     *
     * @var Category
     */
    public $category;

    public function __construct($title, Category $category) {
        $this->title = $title;
        $this->category = $category;
    }
}

Models/Category.php :

class Category {
    /**
     * Name of the category.
     *
     * @var string
     */
    public $name;

    /**
     * Posts that are assigned to this category.
     *
     * @var Post[]
     */
    public $posts;

    public function __construct($name, array $posts) {
        $this->name = $name;
        $this->posts = $posts;
    }
}

Quando voglio visualizzare un post, lo recupererò tramite un ID da un database. Ma per quanto riguarda la categoria? Quando voglio ottenere il nome della categoria (per visualizzarlo nelle meta informazioni sotto il post) devo recuperare tutti i post che appartengono a questa categoria.

Quindi le mie domande sono: è meglio memorizzare gli ID dei post in Category::$posts invece di interi oggetti?

    
posta ihmels 13.07.2015 - 14:28
fonte

2 risposte

1

Se ho capito correttamente la tua domanda, non riesco a vedere il problema. Con i post e le categorie vengono memorizzati separatamente nel database, la relazione tra loro deve essere memorizzata all'interno di una tabella di giunzione. Quindi, quando recuperi un post tramite il suo ID, puoi cercare la categoria corrispondente all'interno della tabella di giunzione. Un esempio:

Colonne della tabella Categorie:

  • id
  • nome
  • Descrizione

Post colonne della tabella:

  • id
  • titolo
  • contenuto

Colonne della tabella di giunzione

  • category_id
  • post_id

Entrambe le colonne all'interno della tabella di giunzione sono chiavi esterne delle rispettive colonne della tabella. Supponiamo quindi di recuperare post con un ID di 123 . Quindi si cerca la riga del database nella tabella di congiunzione in cui la colonna post_id è uguale a 123 . Ora hai lo specifico ID di categoria e ora puoi recuperare solo i suoi dettagli specifici.

Spero che questo possa aiutarti, felice codifica!

    
risposta data 13.07.2015 - 14:48
fonte
1

Da quello che vedo, hai progettato i tuoi modelli in modo tale che non puoi avere una categoria senza post.

Hai diversi modi per risolvere questo problema, coprirò un paio.

1. Utilizza l'ereditarietà e dispone di 2 oggetti di categoria.

Hai 2 classi di categorie. BaseCategory e CategoryWithPosts che ereditano da BaseCategory . A meno che non siano necessari tutti i post nell'oggetto categoria, creare un'istanza BaseCategory. Nel costruttore di CategoryWithPosts carica i tuoi post.

2. Hanno i post pigri caricati.

Fornisci un'istanza di PostService alla tua classe di classe al momento dell'istanziazione ed esponi un metodo chiamato GetPost() . In questo modo puoi operare sulla classe di cui hai bisogno e quando hai bisogno dei post, chiama il metodo.

Sono abbastanza sicuro che non hai bisogno di post nella maggior parte delle istanze della tua classe di classe.

    
risposta data 13.07.2015 - 19:16
fonte

Leggi altre domande sui tag