代码之家  ›  专栏  ›  技术社区  ›  Amir

Laravel |使用

  •  0
  • Amir  · 技术社区  · 8 年前

    我在mysql数据库中有两个表:books和pens。

    books&pens有列:bookid、bookname和penid、penname。

    用户有一个事务表:bookid或penid。

    我使用以下命令检索特定用户的所有事务:

    $usertransactions = $user->usertransactions;
    

    不用担心用户和用户事务模型之间的关系,它的所有设置。

    上述函数的响应为:

    "data": {
    
        "Id": "1",
        "Bookid": "27",
    
    }
    

    "data": {
    
        "Id": "2",
        "Penid": "42",
    
    }
    

    我希望结果如下:

    "data": {
    
        "Id": "1",
        "Bookid": "27",
        "Bookname" : "bookname from books table using the Bookid from response"
    
    }
    

    谢谢你的帮助。

    当做

    3 回复  |  直到 8 年前
        1
  •  1
  •   Peyman    8 年前

    首先,命名列的常见做法是 snake_case bookid 作为 book_id CamelCase . 所以不是 usertransactions 最好是写作 userTransactions .

    让我们回到你的问题上来。既然你的回答中有book_id,你应该能够在 UserTransaction 和 Book Book model

    public function userTransactions() {
        return $this->belongsToMany(UserTransaction::class); //it can be one to many or many to many base on your logic. I assume Many to many
    }
    

    然后您应该在中定义反向关系 UserTransaction model :

    public function books(){
        return $this->belongsToMany(Book::class);
    }
    

    现在可以使用 load 方法类似 $usertransactions = $user->usertransactions->load('books')

    https://laravel.com/docs/5.6/eloquent-resources

        2
  •  0
  •   Jasonfish    8 年前

    你的关系是多对多的。

    看看这个: https://laravel.com/docs/5.6/eloquent-relationships#many-to-many

    return$this->belongstomny('App\Book','transactions','user'u id','Book'u id');

    如果需要,使用select或pull设置数据格式。

        3
  •  0
  •   Maraboc    8 年前

    Eloquent: API Resources :

    您必须创建一个Usertransaction资源,假设您在Usertransaction和Book模型之间有一对一的关系:

    <?php
    
    namespace App\Http\Resources;
    
    use Illuminate\Http\Resources\Json\JsonResource;
    
    class Usertransaction extends JsonResource
    {
        /**
         * Transform the resource into an array.
         *
         * @param  \Illuminate\Http\Request
         * @return array
         */
        public function toArray($request)
        {
            return [
                'id' => $this->id,
                'Bookid' => $this->book->bookid,
                'Bookname' => $this->book->bookname 
            ];
        }
    }
    

    最后,在控制器中可以执行以下操作:

    use App\Usertransaction;
    use App\Http\Resources\Usertransaction as UsertransactionResource;
    
    function YourMethod() {
        $usertransactions = $user->usertransactions;
        return UsertransactionResource::collection($usertransactions);
    }
    

    附言:笔也可以这样做:)