0

Im tring to use sugars database structure in a custom php application.

for example you'd write a query something like this

     SELECT *
       FROM quotes
 INNER JOIN quotes_cstm on quotes.id = quotes_cstm.id_c AND quotes.deleted = 0
# some wheres here

From laravel heres an exmaple of my code.

class quotes_cstmModel extends baseModel
{


}


class quotesModel extends baseModel
{
    public static $select = ['id', 'name'];

    protected $with = ['quotes_cstm'];

    public function quotes_cstm()
    {
        return $this->hasOne('quotes_cstmModel','id_c');
    }
}

the toArray output of the quotes model is something like

array(
id => '231312',
name => 'quote name',
 quotes_cstm = array(
  'id_c' => '231312'
  'some_cstm_field_c' => 'some value',
 )
);

so what I am asking, how do I just append the id_c and some_cstm_field_c to the main array without the quotes_cstm part of the multidimensional array?

usage example I want something like

Im trying to keep my usage to something like this.

$quote = quotesModel::find('QUOTE_ID_HERE');

2
  • You could use flatten array function, but this will remove all keys from the array. Only the values would be left. Commented Oct 28, 2014 at 15:54
  • I would loose laravels collection functionality though. Commented Oct 28, 2014 at 15:56

1 Answer 1

1

You could override __get method, in order to try to access the property on the relation, if it's not found on the quote:

class quotesModel extends baseModel
{
    public function __get($key)
    {
        return $this->getAttribute($key) ?: $this->quotes_cstm->getAttribute($key);
    }
}    
Sign up to request clarification or add additional context in comments.

5 Comments

i still loose laravels collection stuff.. I think I may have to keep the quotes_cstm subarray. I was hoping to avoid that. Thank you though
What do you mean by 'loose laravels collection stuff'? running toArray on it converts it to multidimensional array, so you can't run any of the collection methods on it after that point anyway. If you could show an example of where you use the object, that would be helpful - as I imagine you could achieve your goal using either proxy methods or magic __get() and __set() methods. Thanks.
If I use something like $quote = quotesModel::find('QUOTE_ID_HERE'); * currently to use the custom values from the join I have to $id_c = $quotes->quotes_cstm->id_c; >I want $id_c = $quotes->id_c;
Thanks - I've edited my response based on your feedback.
GREAT! I didn't think about doing it that way

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.