Ruless
@Ruless
Frontend development

Как вывести массив в Vuejs полученый от Laravel?

Здравствуйте. Начал использовать VueJs&Laravel для проекта и возник такой вопрос. Как вывести данные которые я получаю из связанной таблицы в Laravel?
Ларавел функция которая возвращает данные:
public function getTransactionList(){
        $transactions = Transaction::where('user_id', Auth::id())->get();
        $transactions->load('recipient');

        $array = [
            'transactions' => $transactions
        ];

        return $array;        
    }  

// Model
    public function recipient(){
        return $this->hasOne('App\User', 'id', 'recipient_id');
    }

Получаю
5ac26c05918ae913615590.png
Есть vuejs компонент, который является родительским и он передает в дочерний
<template>
<div class="ui relaxed divided transactions">
    <transaction-item :transactions="transactions"></transaction-item>
</div>
</template>

<script>
 
    import axios from 'axios'
    import Item from './part/Item'

    export default {
    	data() {
            return {
                transactions: [],
            }
    	},
    	components: {
            'transaction-item' : Item,
    	},

    	created() {
    		axios.post('/transaction/getTransactionList')
                    .then(response => {
                    this.transactions = response.data.transactions;

                    })
                    .catch(error => {
                        console.log(error)
                    });
    	}
    }
</script>


Когда я в transaction-item пишу
<div>
	<div class="item" v-for="item in transactions">
{{ item.recipient.login }}
	</div>
</div>


В консоли ошибка что TypeError: item.recipient is null

Хотя в других компонента я делал нечто подобное и было все норм
  • Вопрос задан
  • 482 просмотра
Пригласить эксперта
Ответы на вопрос 2
Sanasol
@Sanasol
нельзя просто так взять и загуглить ошибку
Можно сделать и посмотреть что там не так.
{{ item.recipient }}
или
{{ item }}
Ответ написан
@Orfen
Попробуй $transactions не складывать в $array.
И там где передаешь :transactions, добавь для этого пропса sync (т.е :transactions.sync=transactions)

И да, в transaction-item, укажи в модуле:
// Item.js
export default{
    props:{
         transactions:{
               type: Array,
               default: []
         }
    }
}

//Item.vue
<template>
<div>
  <div class="item" v-for="item in transactions">
{{ item.recipient.login }}
  </div>
</div>
</template>
<script src="./Item.js"></script>


Как-то так должно выглядеть
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы