как сделать API для ионной из двух таблиц (пользователей и сообщений) в базе данных

Я хочу сделать API (я использую Laravel 4.2 для бэкэнда) для использования ионного приложения.
например:

// Я сделал следующие $ туристов:

                    $tourists = User::where('block','0')
->where('guider', 1)
->where('location', $location)
->orderBy($orderBy, 'desc')
->orderBy('updated_at', 'desc')
->get();
return View::make('frontend.data.touristsData',array('tourists'=>$tourists));

// touristData:

    <?php
echo json_encode($tourists);

// использовал его в моем app.js (ionic):

.controller('listController', ['$scope','$http','$state','$ionicModal', function($scope, $http, $state,$ionicModal){

$http.get("./touristsData").success(

function(data){
$scope.tourists = data;
......

// используется в html

<div>{{tourists.username}}: {{tourists.intro}}</div>

// выше для одной таблицы

но что, если у меня есть две таблицы, например, таблица пользователей и таблица сообщений

// таблица пользователей (миграция laravel)

            $table -> increments('id');//id auto_increment
$table -> string('username',30);
$table -> string('email',60) -> unique();
$table -> string('password',64);
$table -> boolean('admin')->default(0);
$table -> boolean('block')->default(0);

$table -> integer('tradeTime');
$table -> string('nationality', 50);

// таблица сообщений

            $table->increments('id');
$table -> integer('needHour');$table -> string('travelDestination',40);
$table -> text('intro',300);
$table -> string('otherWords', 100);
$table->integer('user_id');
$table->softDeletes();

$table ->timestamps();

//user.php

    <?php

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

class User extends Eloquent implements UserInterface, RemindableInterface {

use UserTrait, RemindableTrait;

/**
* The database table used by the model.
*
* @var string
*/
protected $table = 'users';
protected $guard = array('email', 'password');

/**
* The attributes excluded from the model's JSON form.
*
* @var array
*/
protected $hidden = array('password', 'remember_token');public function posts(){
return $this->hasMany('Posts');
}

//post.php

    <?php
use Illuminate\Database\Eloquent\SoftDeletingTrait;
class post extends Eloquent{
use SoftDeletingTrait;
protected $dates = ['deleted_at'];

protected $fillable = ['needHour', 'travelDestination','intro','otherWords'];public function user()
{
return $this->belongsTo('User');
}
}

мы можем видеть, что таблица пользователей и таблица сообщений связаны друг с другом user_id,
поэтому мой вопрос заключается в том, как мы можем вывести содержимое двух таблиц вместе, точно так же, как и выше, который имеет только одну таблицу для вывода (это легко)?

то, что я хочу achevie, похоже на следующий код:

<div>{{tourists.username}} : {{tourists.travelDestination}}</div>

1

Решение

Есть много способов достичь этого.

Вы можете использовать соединения

$userWithDestinations = User::where('condition')->join('destination_table', function ($join)
{
$join->on('user.userID', '=', 'post_table.userID')
})->where('moreConditions')->get()

Вы можете использовать Laravel Eager Загрузка (Я настоятельно рекомендую этот подход для многократного использования)

Ваша модель пользователя может выглядеть так

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class User extends Model
{
/**
* The table associated with the model.
*
* @var string
*/
protected $table = 'users';

public function posts()
{
return $this->hasMany('App\Posts');
}
}

Для того, чтобы сделать что-то вроде этого:

$userWithDestinations = User::where('condition')->with(['posts'])->where('moreConditions')->get();

Этот последний код, использующий энергичную загрузку, сгенерирует данные JSON следующим образом:

[
{
userID:1,
name: Luis,
posts:
[
{
postID: 1,
travelDestination: 'Mexico'
},
{
postID: 11,
travelDestination: 'France'
},
]
},
{
userID:13,
name: John,
posts:
[
{
postID: 14,
travelDestination: 'Germany'
},
{
postID: 55,
travelDestination: 'Brazil'
},
]
}
]

Поскольку ваши USER-POSTS — это отношение 1-N, в Angular вы можете сделать что-то вроде следующего кода, если вы хотите получить только первое сообщение для пользователя.

{{tourist.username}} : {{tourist.posts[0].travelDestination}}

Larevel Model Docs

https://laravel.com/docs/5.1/eloquent-relationships

НОТА

Краткое изложение вашего вопроса на самом деле не о «создании API», это скорее сомнение в модели Laravel.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]