[Laravel] Soort subkey bij een belongsTo model

Pagina: 1
Acties:

Acties:
  • 0 Henk 'm!

  • afraca
  • Registratie: April 2009
  • Laatst online: 13-08 16:46

afraca

Open Source!

Topicstarter
Eloquent collections hebben echt leuke methodes:

http://laravel.com/api/4..../Eloquent/Collection.html

(De API is sowieso aan te raden om eens door te browsen, het is aardig wat, maar je komt leuke dingen tegen die totaal niet in de docs staan :) )

Nu heb ik conceptueel ongeveer dit: Een model A, met een hasMany('B'). Dus meerdere B's horen bij een enkele A. Als ik een instance heb van een A, wil ik eigenlijk de collectie die ik door de relatie krijg, behandelen alsof een andere kolom m'n primary key is. Dus over de hele tabel van B is 'foo' bijvoorbeeld niet een valide key, maar enkel binnen de items van B die bij een $a horen, is 'foo' dat wel.

Je kan bijvoorbeeld collections diffen enzo, maar niet met erg veel flexibiliteit. Daarom zou het leuk zijn. (Omdat de code behorend bij hierboven triviaal is, is dat een exercise voor de lezer ;) )

IMDB vote history | Next-gen OS, audio en video player, search engine en Movie DB


Acties:
  • 0 Henk 'm!

  • Barryvdh
  • Registratie: Juni 2003
  • Laatst online: 16-10 16:51
Kan je een concreet voorbeeld geven wat je nu probeert te bereiken?

Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 15-10 22:15

Janoz

Moderator Devschuur®

!litemod

Het lijkt me dat je dat in je database kunt bereiken door een unique constraint te zetten op de combinatie van de foreign key en je 'subkey', maar net als Barryvdh ben ik erg benieuwd naar wat je nu werkelijk probeert te bereiken. Ik krijg een beetje het gevoel dat je het verkeerde probleem aan het oplossen bent.

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Acties:
  • 0 Henk 'm!

  • afraca
  • Registratie: April 2009
  • Laatst online: 13-08 16:46

afraca

Open Source!

Topicstarter
Ik ben er net weer opgekomen hoe de term heet waar ik misschien wat mee kan: composite key. Maar, ik wil eigenlijk alleen maar een composite key in sommige gevallen... :P

Stel, ik heb een soort meta-Model genaamd Resource. En die heeft many Field modellen bij zich. Dan wil ik eigenlijk de collection bijv. kunnen 'diffen', zoals je met een array_diff zou doen, maar dan met m'n eigen key function. De composite key zou 'name' met 'group' zijn.

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
<?php

use Illuminate\Database\Eloquent\Collection as DBCollection;

class Resource extends \Eloquent
{

  public function fields(){
    return $this->hasMany('Field');
  }

}

class Field extends \Eloquent{
  protected $fillable = ['name', 'group']; //etc

  public function resource(){
    return $this->belongsTo('Resource')
  }
}

class FooController {
  public function create(){
    $res = Resource::with('fields')->first();
    $manual = new Resource(Input::all());
    $manFields =new DBCollection(new Field(['name' => 'qaz', 'group' => 'grp1']), new Field(['name' => 'twak', 'group' => 'grp1']));
    $manual->fields = $manFields;
    
    // I want this:
    $diff = $res->fields->diff($manual);
    // With diffing on the composite key: 'name' and 'group'
  }
  
}


edit: Lijkt er dus op dat de schema builder wel composite keys aankan, maar Eloquent niet.

[ Voor 4% gewijzigd door afraca op 23-02-2015 17:15 . Reden: code formatting dingetje ]

IMDB vote history | Next-gen OS, audio en video player, search engine en Movie DB